快速排序

一.排序

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函数:将小于标准值的数放在标准值的左边,大于的放在右边。

ii.Circe函数:主要做递归,分为三步走:

a.调用Sort函数,将数组A进行排序。
b.调用Sort函数,将排序后的数组A的左边进行排序。
c.调用Sort函数,将排序后的数组A的右边进行排序。

3.如何避免最坏的情况

i.分析

a.如果标准值刚好取到最大值或者最小值,此时递归是深度就会比其他情况更大,所以快排很不稳定。
b.快排详细分析

ii.改进

a.快排优化
posted @ 2022-03-27 16:43  彭乐祥  阅读(37)  评论(0编辑  收藏  举报