这次是算法中最常用的快速排序,常备成为快排,这里是头尾两个指针的算法。
//快速排序
#include <iostream>
#include <cstdio>
using namespace std;
int partition(int *Array, int i, int j)
{
int t = *(Array + 1);
while(i < j)
{
while(i < j && *(Array + j) >= t)
{
j--;
}
if(i < j)
{
*(Array + 1) = *(Array + j);
i++;
}
while(i < j && *(Array + i) <= t)
{
i++;
}
if(i < j)
{
*(Array + j) = *(Array + i);
j--;
}
}
*(Array + i) = t;
return i;
}
void QuickSort(int *Array, int low, int hight)
{
int mid;
if(low < high)
{
mid = Partition(Array, low, high);
QuickSort(Array, low, mid - 1);
QuickSort(Array, mid + 1, high);
}
}
int main()
{
int i, n;
int Array[255];
printf("请输入数据的个数\n");
scanf("%d", &n);
if(n <= 0 && n >= 255)
{
printf("数据不合理!\n");
exit(1);
}
printf("请依次输入待排序的数据:\n");
for(int i = 1; i <= n; ++i)
{
scanf("%d", (Array + i));
printf("\n待排序的数组是:\n");
for(int i = 1; i <= n; ++i)
{
prntf("%d", *(Array + i));
}
QuickSort(Array, 1, n);
printf("\n排序后的数组是:\n");
for(int j = 1; j <= n; ++j)
{
printf("%d ", *(Array + j));
}
printf("\n");
}
return 0;
}