1 题目
功能:快速排序
描述:利用快速排序进行将数组序列从小到大排序
2 思路
在待排序的n个数据中取第 1 个数据作为基准值,将所有记录分为 3 组
使笫一组中各数据值均小于或等于基准值,第二组做基准值的数据,第三组中各数据值均人于或等于基准值,这便实现了第一趟分割,然后再对第一组和第三组分别重复上述方法。
依次类推;直到每组中只有一个记录为止
3 代码
#include <stdio.h>
#include <stdlib.h>
/**
功能:快速排序
描述:利用快速排序进行将数组序列从小到大排序
**/
void qusort(int s[], int start, int end) { // 自定义函数qusort()
int i, j; // 定义变量为基本整型
i = start; // 将每组首个元素赋给i
j = end; // 将每组末尾元素赋给j
s[0] = s[start]; // 设置基准值
while (i < j){
while (i < j && s[0] < s[j])
j--; // 位置左移
if (i < j){
s[i] = s[j]; // 将s[j]放到s[i]的位置上
i++; // 位置右移
}
while (i < j && s[i] <= s[0])
i++; // 位置右移
if (i < j){
s[j] = s[i]; // 将大于基准值的s[j]放到s[i]位置
j--; // 位置右移
}
}
s[i] = s[0]; // 将基准值放入指定位置
if (start < i)
qusort(s, start, j - 1); // 对分割出的部分递归调用函数qusort()
if (i < end)
qusort(s, j + 1, end);
}
int main(int argc, char const *argv[]) {
int a[11], i; // 定义数组及变量为基本整型
printf("请输入10个数:\n");
for (i = 1; i <= 10; i++)
scanf("%d", &a[i]); // 从键盘中输入10个要进行排序的数
qusort(a, 1, 10); // 调用qusort()函数进行排序
printf("排序后的顺序是:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]); // 输出排好序的数组
printf("\n");
}
示例结果:
$ gcc ex061.c -o demo
$ ./demo
请输入10个数:
45
12
76
2
45
16
34
61
24
90
排序后的顺序是:
2 12 16 24 34 45 45 61 76 90