C语言简单实现快速排序(分治策略)
1.分解:原序列a[1…t]分解成a[1…i-1]和a[i+1…t];
2.求解子问题:子序列的长度是0或者1表示有序,否则递归求解各个子问题;
3.合并:把各个子系列的结果合并到数组a中即可。
//C语言代码实现
#include<stdio.h>
void disp(int a[], int n) {
int i;
for (i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
int Partition(int a[], int s, int t) {
int i = s;
int j = t;
int temp = a[s];
//对数组进行划分
while (i != j) {
//从后向前排序
while (i<j&&a[j]>=temp)
{
j--;
}
a[i] = a[j];//将a[j]迁移到a[i]的位置
while (i < j && a[i] <= temp) {
i++;
}
a[j] = a[i];//把大的数字向后边移动
}
a[i] = temp;
return i;
}
void quickSort(int a[],int s,int t) {
if (s < t) {
int i = Partition(a, s, t);
quickSort(a, s, i - 1);
quickSort(a, i + 1, t);
}
}
void main() {
int n = 10;
int a[] = { 2,5,1,7,10,6,9,4,3,8 };
printf("排序前:\n"); \
disp(a, n);
quickSort(a, 0, n - 1);
printf("排序后:\n");
disp(a, n);
}
运行结果: