基準數後面的數需要大於基準數,從後向前尋找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...