数据结构学习--快速排序算法

来源:互联网 发布:杀毒软件哪个好 知乎 编辑:程序博客网 时间:2024/06/07 05:03
    快速排序是一种采用分治思想的排序,其主要的思想是从待排序的数据中取出一个分割元素,然后将余下的数据与分割的元素进行比较,把大于分割元素的数据放到分割元素的右边,把小于分割元素的数据放到左边,经过第一次排序之后,数据被分成了两部分,分割元素右边都是比它大的,左边都是比它小的。运用递归重复以上的操作,直到数据有序为止。
   下面是具体的算法实现:
#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;//返回分割元素的下标
}


0 1