快速排序是一种采用分治思想的排序,其主要的思想是从待排序的数据中取出一个分割元素,然后将余下的数据与分割的元素进行比较,把大于分割元素的数据放到分割元素的右边,把小于分割元素的数据放到左边,经过第一次排序之后,数据被分成了两部分,分割元素右边都是比它大的,左边都是比它小的。运用递归重复以上的操作,直到数据有序为止。
下面是具体的算法实现:
#include<stdio.h>
#define N 10
int part_ele(int a[],int ,int );
void sort(int a[],int ,int );
main()
{
int a[N],i;
printf(“请输入10个排序数字:”);
for(i=0;i<N;i++)
scanf(“%d”,&a[i]);
sort(a,0,N-1);
printf(“排序后:\n”);
for(i=0;i<N;i++)
printf(“%d “,a[i]);
return 0;
}
void sort(int a[],int low,int high)
{
int middle;
middle=part_ele(a,low,high);
if(low>=high) return ;
sort(a,low,middle-1);//将分割元素左边数据进行排序
sort(a,middle+1,high);
}
int part_ele(int a[],int low,int high)
{
int part_element=a[low];
for(;;){
while(low<high&&a[high]>=part_element)
high–;
if(low>=high) break;//low和high指针“汇合”跳出循环
a[low++]=a[high];
while(low<high&&a[low]<=part_element)
low++;
if(low>=high) break;
a[high–]=a[low];
}
a[high]=part_element;//将分割元素放到数组
return high;//返回分割元素的下标
}