快速排序知识点简记

快速排序是个最优和平均情况下时间复杂度都为O(nlogn)的排序算法,但在最坏情况下时间复杂度为O(n^2)(已经排好序,且每次选的都是最小最大值)
快速排序不是个稳定的排序算法。(稳定体现在若待排序的算法有两个相同值,则相对在后的那个值会排在前相同值后面)
值得一提的是,大学阶段的稳定排序只有直接插入,冒泡排序,合并还有基数排序。
快速排序步骤:(核心是不断以哨兵为界限,左右分别为小于和大于的)
1.选择基准或者叫哨兵(一般为第一个元素),设定low和high两个指针(不是指针但类似指针的作用,用来定位和移位)
2,(递归)比较,哨兵先对high指向的值比较,若小于哨兵,high指向值移到low位置,接下来换位,high不动,loe动,接着与key(哨兵)比较,比key大则放high位,循环到left==high,key左右分两块,一块大于key一块小于。
3.合并:也就是递后归,将几块合并(并不是真分几个集合,而是相对上面相对key左右而言)最终得到排好序的数列。
注意只有key左右分别只有一个元素时才可称排好序。
`void QuickSort(int array[], int low, int high) {
int i = low;
int j = high;
if(i >= j) {
return;//边界条件,代表就剩一个元素不能再划分了
}
int temp = array[low];
while(i != j) {
while(array[j] >= temp && i < j) {
j--;
}
while(array[i] <= temp && i < j) {
i++;
}
if(i < j) {
swap(array[i], array[j]);//找左边大于temp和右边小于temp的数交换
}
}

//将基准temp放于自己的位置,(第i个位置)
swap(array[low], array[i]);//将哨兵放到该放的地方
QuickSort(array, low, i - 1);//递归地对基准元素左边的子数组[low, i - 1]和右//边的子数组[i + 1, high]进行排序。
QuickSort(array, i + 1, high);
}`

posted @ 2026-03-25 19:06  Szy111  阅读(7)  评论(0)    收藏  举报