無序數組內查找指定值(快速查找)


面試過程中遇到這個問題

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

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

所以先將數組 有序排列(冒泡排序)

再進行二分查找

冒泡排序:(相鄰比逆法,基本思想是,兩兩比較相鄰記錄的關鍵字,如果反序,則交換,直到沒有反序的記錄為止)

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;
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM