一.排序
1.快速排序代码
#include<stdio.h>
#define Max 100 //储存的最大值
int Sort(int A[],int head,int end) {
int Standard = A[head]; //标准值为最左边的数
while (head < end) {
while (A[end] >= Standard && head < end)
end--;
A[head] = A[end];
while (A[head] <= Standard&& head < end)
head++;
A[end] = A[head];
}
A[head] = Standard;
return end;
}
void Circle(int A[],int head,int end) {
if (head < end) {
int temp;
temp = Sort(A, head, end);
Circle(A, head, temp-1);
Circle(A, temp+1, end);
}
}
void Print(int A[],int n) {
for (int i = 0; i < n; i++)
printf("%d\t", A[i]);
}
int main() {
int n,A[Max];
printf("请输入n:\n");
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
scanf_s("%d", A + i);
Circle(A, 0, n-1);
Print(A, n);
}
2.过程
i.Sort函数:将小于标准值的数放在标准值的左边,大于的放在右边。
![](https://img2022.cnblogs.com/blog/2177087/202203/2177087-20220327135453064-1467196296.png)
ii.Circe函数:主要做递归,分为三步走:
a.调用Sort函数,将数组A进行排序。
b.调用Sort函数,将排序后的数组A的左边进行排序。
c.调用Sort函数,将排序后的数组A的右边进行排序。
3.如何避免最坏的情况
i.分析
a.如果标准值刚好取到最大值或者最小值,此时递归是深度就会比其他情况更大,所以快排很不稳定。
ii.改进