您的位置:首页 > 理论基础 > 数据结构算法

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

2016-06-14 23:15 211 查看
    快速排序是一种采用分治思想的排序,其主要的思想是从待排序的数据中取出一个分割元素,然后将余下的数据与分割的元素进行比较,把大于分割元素的数据放到分割元素的右边,把小于分割元素的数据放到左边,经过第一次排序之后,数据被分成了两部分,分割元素右边都是比它大的,左边都是比它小的。运用递归重复以上的操作,直到数据有序为止。

   下面是具体的算法实现:

#include<stdio.h>

#define N 10

int part_ele(int a[],int ,int );

void sort(int a[],int ,int );

main()

{                                                                            

        int a
,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;//返回分割元素的下标

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息