aha-algorithm/quick_sort.c

61 lines
1.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
int a[101], n; // 定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right)
{
int i, j, temp; // 定义局部变量
if (left > right)
return; // 结束递归
temp = a[left]; // temp中存的就是基准数
i = left; // i中存的就是左边的坐标最左边的坐标就是基准数的坐标
j = right; // j中存的就是右边的坐标
while (i != j)
{
// 找到右边小于基准数的数
// 顺序很重要,要先从右边开始找
while (a[j] >= temp && i < j)
j--;
// 找到左边大于基准数的数
// 再从左往右边找
while (a[i] <= temp && i < j)
i++;
// 当左右两边的数都找到,而且没有重合时,交换两个数在数组中的位置
if (i < j)
{
// 使用异或运算交换两个数
a[i] = a[i] ^ a[j];
a[j] = a[i] ^ a[j];
a[i] = a[i] ^ a[j];
}
}
// 最终将基准数归位
a[left] = a[i];
a[i] = temp;
quicksort(left, i - 1); // 继续处理左边的,这里是一个递归的过程
quicksort(i + 1, right); // 继续处理右边的,这里是一个递归的过程
}
int main()
{
int i, j;
// 读入数据
scanf("%d", &n);
for (i = 1; i <= n; i++)
scanf("%d", &a[i]);
quicksort(1, n); // 快速排序调用
// 输出排序后的结果
for (i = 1; i <= n; i++)
printf("%d\t", a[i]);
getchar();
getchar();
return 0;
}