码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序算法

时间:2016-02-12 12:48:21      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:

快速排序采用的思想是分治思想,是对要进行排序的数据分割成独立的两部分,其中一部分的数据要比另一部分的数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

代码如下:

///所有排序算法的基本结构体

typedef struct

{

    int data[MAX_SIZE + 1];//数据

    int length;//长度

}SqList;

 

//交换两个数据

void  Swap(SqList *list ,int i,int j)

{

 if(!list) return;

    int temp = list->data[i];;

    list->data[i] = list->data[j];

    list->data[j] = temp;

}

 void printfSqList(SqList *list)

{

    if (list) {

        for (int i =0; i< list->length; i++) {

            printf("%d ",list->data[i]);

        }

    }

}

//交换list中子表的记录,确定枢轴,返回其位置

int Partition(SqList *list,int low,int high)

{

   int pivotKey;

    int m = low + (high - low)/2;

    if (list->data[low]>list->data[high]) {

        Swap(list, low, high);//交换左端与右端,始左端较小

    }

    if (list->data[m]>list->data[high]) {

        Swap(list, high, m);//交换中间与右端,使中间较小

    }

    if (list->data[m]>list->data[low]) {

        Swap(list, high, m);//交换中间与左端,使左端较小

    }

    pivotKey = list->data[low];

    while (low<high) {

        while ( low<high && list->data[high]>=pivotKey) {

            high--;

        }

        Swap(list, low, high);//交换,将比pivot小的值换到low;

        while ( low<high && list->data[low]<=pivotKey) {

            low++;

        }

        Swap(list, low, high);

    }

    return low;

}

//list->data[low...high]做排序。low:最小下标,high:最大下标

void QuickSort(SqList *list,int low,int high)

{

    int pivot;//枢轴

    if (low<high) {

        pivot = Partition(list,low,high);

        QuickSort(list, low, pivot-1);

        QuickSort(list, pivot+1, high);

    }

}

main方法中加入

{

int array[] = {7,6,9,10,5,1,8};

        SqList  listStruct;

        printf("source data:");

        SqList  *plist = &listStruct;

        for (int i =0 ; i<7; i++) {

            plist->data[i] = array[i];

            printf("%d ",plist->data[i]);

        }

        plist->length = 7;

        printf("\r\n");

        QuickSort(plist, 0, 6);

        printf("final data :");

        printfSqList(plist);

}

 

在此基础上还可以对快速算法进行优化,有时间了在搞。

 

 

快速排序算法

标签:

原文地址:http://www.cnblogs.com/menchao/p/5186943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!