/*
2.6 and 2.7
快速排序
Q:将n个键排列为非递减顺序.
I:正整数n; 键的数组S,索引范围为1至n.
O:数组S, 其中包含按非递减顺序排列的键.
*/
#include<stdio.h>
#include<stdlib.h>
void CreatArray(int *Array, int Size);
int QuickSort(int *Array, int p, int r);
int Partition(int *Array, int p, int r);
int main()
{
//变量声明
int n, i;
int *a;
//创建数组
printf("input n: ");
scanf("%d", &n); //数组大小
a = (int *)malloc(sizeof(int) * n);
CreatArray(a, n);
//排序;
QuickSort(a, 0, n-1);
//输出
for(i = 0; i<n; i++)
{
printf("%d\t", a[i]);
}
}
/*
创建一维动态数组
*/
void CreatArray(int *Array, int Size)
{
int i;
for(i=0; i<Size; i++)
{
printf("a[%d]:" , i);
scanf("%d", &Array[i]);
}
}
/*
快速排序
*/
int QuickSort(int *Array, int p, int r)
{
int q;
if(p < r)
{
q = Partition(Array, p, r);
QuickSort(Array, p, q-1);
QuickSort(Array, q+1, r);
}
return 0;
}
/*
分割
*/
int Partition(int *Array, int p, int r)
{
int x = Array[r];
int i = p - 1;
int j = p;
int temp;
for(; j<r; j++)
{
if(Array[j] < x)
{
i++;
temp = Array[i];
Array[i] = Array[j];
Array[j] = temp;
}
}
temp = Array[i+1];
Array[i+1] = Array[r];
Array[r] = temp;
return i+1;
}
快速排序(源码)
最新推荐文章于 2022-05-16 22:53:57 发布