快排的中心思想,就是选取一个元素通过一趟排序将比这个元素大的换到前面,把这个元素小的换到后面。然后在继续进行排序。
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;
}