1.通常将数组第一个元素作为key,然后从后向前找,如果arr[last] < key,交换两个元素的位置。
2.从前往后找,如果arr[first] > key,交换两个元素的位置。
3.直到first=last。这时key所在的位置,前面的元素都比key小,后面的都比key大。
4.把key前后的两个数组执行1,2,3步。直到整个数组顺序正确。
C++代码:
void quikSort(int *arr, int low, int high){
if (low >= high) { //递归调用时的出口
return;
}
int first = low,last = high,key = arr[first]; //first和last为游标
while (first < last) {
while (first < last && key <= arr[last]) { //从后向前找大于key的值然后交换
last--;
}
arr[first] = arr[last];
arr[last] = key;
while (first < last && key >= arr[first]) { //从前向后找小于key的值然后交换
first++;
}
arr[last] = arr[first];
arr[first] = key;
}
//此时,first = last,前面的值都比arr[first]小,后面的值都比它大
quikSort(arr, low, first-1); //对前后两个数组进行快速排序
quikSort(arr, first+1, high);
}
快速排序:不稳定,时间复杂度 最理想 O(nlogn) 最差时间O(n^2)