快速排序:平均时间复杂度:O(NlogN), 最差:O(n^2)
#include <stdio.h>
int a[100], n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {
int i, j, t, temp;
//首先判断,若左哨兵已经大于右哨兵,则直接返回
if (left > right)
return;
temp = a[left]; //temp中存的基准数
i = left;
j = right;
while (i != j) {
//基准数在左边,一定要从右哨兵开始
while (a[j] >= temp && i < j) {
j--;
}
//再从左往右找
while (a[i] <= temp && i < j) {
i++;
}
if (i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//最终将基数归为
a[left] = a[i];
a[i] = temp;
quicksort(left, i - 1);//继续处理左边的,递归就行
quicksort(i + 1, right); //继续处理右边
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
quicksort(0, n - 1);
for (int i = 0; i < n; i++)
printf("%d ", a[i]);
getchar(); getchar();
return 0;
}