快排的中心思想,就是選取一個元素通過一趟排序將比這個元素大的換到前面,把這個元素小的換到後面。然後在繼續進行排序。
void sort(int datas[],int low,int high){
if(low >= high){
return;
}
int first = low;
int last = high;
int key = datas[first];
while (first < last) {
while (first < last && datas[last] >= key) {
last--; //10,3,5,23,9,12,22
}
datas[first] = datas[last]; //[9],3,5,23,9,12,22--------> 10 = 9 last = 4 從尾部開始找到 比key(第一個元素)小的,然後將比key大的放到首部
while (first < last && datas[first] <= key) {
first++; //9,3,5,23,9,12,22 first = 3
}
datas[last] = datas[first]; //[9],3,5,23,9,12,22 從頭部開始找到 比key(第一個元素)大的,然後將比key小的放到尾部
}
datas[first] = key;
sort(datas, low, first -1);
sort(datas, first + 1, high);
}
二分查找的思想就是取中間元素和目標元素比較,如果比目標大,則比下限,如果比目標小則比上限。
int find(int datas[],int dst){
int low = 0;
int high = datas.length -1;
while (low <= high) {
int middle = (low + high) >> 1;
if(datas[middle] == dst){
return middle;
}else if (datas[middle] < dst) {
low = middle;
}else {
high = middle;
}
}
return -1;
}