排序--快速排序
Posted 可口可乐不加冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序--快速排序相关的知识,希望对你有一定的参考价值。
原理:快速排序需要选择一个元素作为key,然后以key为基准,比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;
}
以上是关于排序--快速排序的主要内容,如果未能解决你的问题,请参考以下文章