快速排序 二分查詢

2021-09-11 14:20:08 字數 2002 閱讀 2859

基準數後面的數需要大於基準數,從後向前尋找a[j]< tmp,尋找到a[8]的3<5,將a[8]放入空位a[0]中,a[j]=a[8]此時空出位置

接著從前向後遍歷a[i] > 5,找到a[1]符合條件,將a[1]放入空位a[8],a[1]空出

繼續從後向前尋找

繼續從後向前尋找

遍歷至i == j 結束,此時i前邊元素小於5,後面元素大於5,將5放入a[i]處

至此為止,基準數tmp=5已經放入在陣列a中正確位置,其前面的數均小於它,後面的數均大於它,對於前後的兩區遞迴進行如上操作,直至前後兩區僅剩乙個數。

//快速排序

static void quick_sort(int s, int left, int right)

while (i < j && s[i] < temp) // 從左向右找第乙個大於等於x的數

i++;

if (i < j)

}s[i] = temp;

quick_sort(s, left, i - 1); // 遞迴呼叫

quick_sort(s, i + 1, right);}}

// 快速排序還有很多改進版本,如隨機選擇基準數,區間內資料較少時直接用另的方法排序以減小遞迴深度。有興趣的筒子可以再深入的研究下。

public static void main(string args) ;

quick_sort(arr, 0, arr.length - 1);

system.out.println("排序後:");

for (int i : arr)

}

有序的序列,每次都是以序列的中間位置的數來與待查詢的關鍵字進行比較,每次縮小一半的查詢範圍,直到匹配成功。

int middle = (low + high) / 2; //初始中間位置

if (arr[middle] > key) else if (arr[middle] < key) else

}/**

* 不使用遞迴的二分查詢

** @return 關鍵字位置

*/public static int binarysearch(int arr, int key)

while (low <= high) else if (arr[middle] < key) else

}return -1; //最後仍然沒有找到,則返回-1

}public static void main(string args) ;

int key = 3;

//int position = binarysearch(arr,key,0,arr.length - 1);

int position = binarysearch(arr, key);

if (position == -1) else }}

快速排序 二分查詢

1.舉例說明一下吧,這個可能不是太好理解。假設要排序的序列為 2 4 9 3 6 7 1 5 首先用2當作基準,使用i j兩個指標分別從兩邊進行掃瞄,把比2小的元素和比2大的元素分開。首先比較2和5,5比2大,j左移 2 4 9 3 6 7 1 5 比較2和1,1小於2,所以把1放在2的位置 1 4...

二分查詢,氣泡排序, 快速排序

class test if start 1 end else mid start intval end start 2 if arr mid x elseif arr mid x elseif arr mid x 氣泡排序 思路 如原始有x個值需要排序 控制最大的值一直往右移動,第一次迴圈必然造成最...

二分查詢和快速排序

快排的中心思想,就是選取乙個元素通過一趟排序將比這個元素大的換到前面,把這個元素小的換到後面。然後在繼續進行排序。void sort int datas,int low,int high int first low int last high int key datas first while fi...