zoukankan      html  css  js  c++  java
  • 无序数组内查找指定值(快速查找)

    面试过程中遇到这个问题

    首先我先想到的是 二分查找

    但是二分查找,是需要有序的

    所以先将数组 有序排列(冒泡排序)

    再进行二分查找

    冒泡排序:(相邻比逆法,基本思想是,两两比较相邻记录的关键字,如果反序,则交换,直到没有反序的记录为止)

    void bubbleSort(SqList *L){
    
      int i,j;
    
      Status flag = TRUE; //flag用来标记
    
      for(i=1;i<L->length&&flag;i++)//若flag为true,则退出循环
    
      {
    
        flag = FALSE;
    
        for(j=L->length -1;j>=1;j--){
    
          if(L->r[j] > L->r[j+1]){
    
            sway(L,j,j+1);
            flag=TRUE;
          }
    
        }    
    
      }
    
    }
    

      

    二分查找:(前提是 线性表的记录必须是关键有序,基本思想是,在有序表中,取中间记录作为比较对象,若给定的值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关键字,则在中间记录的左半区进行查找;若大于,在右半区进行查找,不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止)

    int Binary_Search(int *a,int n,int key){
    	int low,high,mid;
    	low = 1;
    	high = n;
    	while(low<=high){
    		mid = (low+high)/2;
    		if(key < a[mid])
    			high=mid - 1;
    		else if(key > a[mid])
    			low = mid + 1;
    		else
    			return mid;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    java虚拟机-内存的分配
    java-类的多态和多重继承
    java 设计模式-策略模式
    java-线程介绍和基本使用
    java 数据流操作
    java basic
    JAVA连载117-反射的应用与打破封装新
    C连载2-编译过程以及语言历史概览
    Android连载12-完善新闻app内容区域
    JavaScript连载11-Switch
  • 原文地址:https://www.cnblogs.com/darcy-hui/p/13261511.html
Copyright © 2011-2022 走看看