原理:快速排序需要选择一个元素作为key,然后以key为基准,比key小的放在左边,比key大的放在右边,这是一次过程。一次划分为两个区间,左右区间再用同样的方法进行排序,当最小区间排序完成,则快速排序完成,可返回结果。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int part_sort(int *array, int left, int right)
{
int key = array[right];
while(left < right)
{
while(left < right && array[left] <= key)
left++;
array[right] = array[left];
while(left < right && array[right] >= key)
right--;
array[left] = array[right];
}
array[left] = key;
return left;
}
void quicksort(int *array, int left, int right)
{
if(left >= right)
{
return;
}
int temp_right = 0;
temp_right = part_sort(array, left, right);
quicksort(array, temp_right + 1, right);
quicksort(array, left, temp_right - 1);
}
int main()
{
while(1)
{
int num = 0;
int i = 0;
printf("请输入需要排序的数字的个数\n");
scanf("%d",&num);
printf("输入整数大小为:%d\n", num);
int array[num];
memset(array, 0, num);
if(i < num)
{
while(scanf("%d",&array[i++]))
{
if(getchar() == ‘\n‘)
break;
}
}
quicksort(array, 0, i);
printf("快排后的结果为:");
for(int j = 0; j < num; j++)
{
printf("%d ", array[j]);
}
system("pause");
}
return 0;
}