“快速排序算法”问题的分而治之算法_系统设计“快速排序算法”问题的分而治之算法_分治法_02/**//*

“快速排序算法”问题的分而治之算法_#include_03    标题:<<系统设计师>>应试编程实例-[分治法程序设计]

“快速排序算法”问题的分而治之算法_#include_03    作者:成晓旭

“快速排序算法”问题的分而治之算法_#include_03    时间:2002年09月18日(21:43:00-22:03:00)

“快速排序算法”问题的分而治之算法_#include_03          实现“快速排序算法”问题的分而治之算法函数

“快速排序算法”问题的分而治之算法_快速排序算法_07*/

“快速排序算法”问题的分而治之算法_#include_08#include    "stdio.h"

“快速排序算法”问题的分而治之算法_#include_08#include    "stdlib.h"

“快速排序算法”问题的分而治之算法_#include_08

“快速排序算法”问题的分而治之算法_#include_08//:============================“快速排序算法”问题的分而治之算法===========================

“快速排序算法”问题的分而治之算法_系统设计“快速排序算法”问题的分而治之算法_分治法_02/**//*

“快速排序算法”问题的分而治之算法_#include_03    时间:2002年09月18日(21:43:00-22:03:00)

“快速排序算法”问题的分而治之算法_#include_03          实现“快速排序算法”问题的分而治之算法函数

“快速排序算法”问题的分而治之算法_#include_03    问题描述:

“快速排序算法”问题的分而治之算法_#include_03            用分治法的思想实现快速排序算法。

“快速排序算法”问题的分而治之算法_#include_03    编程思想:

“快速排序算法”问题的分而治之算法_#include_03            快速排序算法的基本思想本身就是分治法。通过分割,将无序序列分成两部分,

“快速排序算法”问题的分而治之算法_#include_03        其中前一部分的元素值都小于后一部分的元素值。然后每一部分再各自递归进行上

“快速排序算法”问题的分而治之算法_#include_03        述过程,直到每一部分的长度为1为止。

“快速排序算法”问题的分而治之算法_#include_03            首先,在序列的第一个,中间一个,最后一个元素中选取中项,设为p[middle],

“快速排序算法”问题的分而治之算法_#include_03        并作temp = p[middle](保存中项);

“快速排序算法”问题的分而治之算法_#include_03            其次,将序列中的第一个元素移到p[middle]的位置上;

“快速排序算法”问题的分而治之算法_#include_03            然后,设两个指针i,j分别指向将排序序列的第一个元素和最后一个元素;

“快速排序算法”问题的分而治之算法_#include_03            重复以上两步,直到i = j为止;

“快速排序算法”问题的分而治之算法_#include_03            最后,将array[i] = temp(将tmep移到array[i])。

“快速排序算法”问题的分而治之算法_快速排序算法_07*/

“快速排序算法”问题的分而治之算法_#include_08#define    MAXN    20

“快速排序算法”问题的分而治之算法_#include_08

“快速排序算法”问题的分而治之算法_#include_08void    Carve_up(int array[],int number,int *m)

“快速排序算法”问题的分而治之算法_系统设计“快速排序算法”问题的分而治之算法_分治法_02...{

“快速排序算法”问题的分而治之算法_#include_03    int i,j,k,middle,temp;

“快速排序算法”问题的分而治之算法_#include_03    i = 0;

“快速排序算法”问题的分而治之算法_#include_03    j = number - 1;

“快速排序算法”问题的分而治之算法_#include_03    k = (i + j) / 2;

“快速排序算法”问题的分而治之算法_#include_03    //在下标i,j,k的数组元素中选取中项

“快速排序算法”问题的分而治之算法_#include_03    if(array[i] >= array[j] && array[j] >= array[k])

“快速排序算法”问题的分而治之算法_#include_03        middle = j;        //Array[j]是中项

“快速排序算法”问题的分而治之算法_#include_03    else if(array[i] >= array[k] && array[k] >= array[j])

“快速排序算法”问题的分而治之算法_#include_03        middle = k;        //Array[k]是中项

“快速排序算法”问题的分而治之算法_#include_03    else

“快速排序算法”问题的分而治之算法_#include_03        middle = i;        //Array[i]是中项

“快速排序算法”问题的分而治之算法_#include_03    temp = array[middle];

“快速排序算法”问题的分而治之算法_#include_03    array[middle] = array[i];

“快速排序算法”问题的分而治之算法_#include_03    while(i != j)

“快速排序算法”问题的分而治之算法_快速排序算法_48“快速排序算法”问题的分而治之算法_#include_49    ...{

“快速排序算法”问题的分而治之算法_#include_03        while(i < j && array[j] >= temp)

“快速排序算法”问题的分而治之算法_#include_03            j --;    //j逐步减小,直到发现一个array[j] < temp为止

“快速排序算法”问题的分而治之算法_#include_03        if(i < j)

“快速排序算法”问题的分而治之算法_快速排序算法_48“快速排序算法”问题的分而治之算法_#include_49        ...{

“快速排序算法”问题的分而治之算法_#include_03            array[i] = array[j];

“快速排序算法”问题的分而治之算法_#include_03            i ++ ;

“快速排序算法”问题的分而治之算法_#include_03            while(i < j && array[i] <= temp)

“快速排序算法”问题的分而治之算法_#include_03                i ++ ;    //i逐步减小,直到发现一个array[i] > temp为止

“快速排序算法”问题的分而治之算法_#include_03            if(i < j)

“快速排序算法”问题的分而治之算法_快速排序算法_48“快速排序算法”问题的分而治之算法_#include_49            ...{

“快速排序算法”问题的分而治之算法_#include_03                array[j] = array[i];

“快速排序算法”问题的分而治之算法_#include_03                j --;

“快速排序算法”问题的分而治之算法_#include_64            }

“快速排序算法”问题的分而治之算法_#include_64        }

“快速排序算法”问题的分而治之算法_#include_64    }

“快速排序算法”问题的分而治之算法_#include_03    array[i] = temp;

“快速排序算法”问题的分而治之算法_#include_03    *m = i;

“快速排序算法”问题的分而治之算法_#include_03    return;

“快速排序算法”问题的分而治之算法_快速排序算法_07}

“快速排序算法”问题的分而治之算法_#include_08void    Quick_Sort(int array[],int number)

“快速排序算法”问题的分而治之算法_系统设计“快速排序算法”问题的分而治之算法_分治法_02...{

“快速排序算法”问题的分而治之算法_#include_03    int i;

“快速排序算法”问题的分而治之算法_#include_03    if(number > 1)

“快速排序算法”问题的分而治之算法_快速排序算法_48“快速排序算法”问题的分而治之算法_#include_49    ...{

“快速排序算法”问题的分而治之算法_#include_03        Carve_up(array,number,&i);

“快速排序算法”问题的分而治之算法_#include_03        Quick_Sort(array,i);

“快速排序算法”问题的分而治之算法_#include_03        Quick_Sort(&array[i + 1],number - i - 1);

“快速排序算法”问题的分而治之算法_#include_64    }

“快速排序算法”问题的分而治之算法_#include_03    return;

“快速排序算法”问题的分而治之算法_快速排序算法_07}

“快速排序算法”问题的分而治之算法_#include_08void    Run_Quick_Sort()

“快速排序算法”问题的分而治之算法_系统设计“快速排序算法”问题的分而治之算法_分治法_02...{

“快速排序算法”问题的分而治之算法_快速排序算法_48“快速排序算法”问题的分而治之算法_#include_49    int i,array[MAXN] = ...{1,9,3,7,18,2,20,4,16,5,15,6,14,7,13,6,12,8,11,10};

“快速排序算法”问题的分而治之算法_#include_03    Quick_Sort(array,MAXN);

“快速排序算法”问题的分而治之算法_#include_03    for(i = 0;i < MAXN;i++)

“快速排序算法”问题的分而治之算法_#include_03        printf("%3d",array[i]);

“快速排序算法”问题的分而治之算法_快速排序算法_07}

“快速排序算法”问题的分而治之算法_#include_08//:============================“快速排序算法”问题的分而治之算法===========================

“快速排序算法”问题的分而治之算法_#include_08

“快速排序算法”问题的分而治之算法_#include_08int main(int argc, char* argv[])

“快速排序算法”问题的分而治之算法_系统设计“快速排序算法”问题的分而治之算法_分治法_02...{

“快速排序算法”问题的分而治之算法_#include_03    Run_Quick_Sort();

“快速排序算法”问题的分而治之算法_#include_03

“快速排序算法”问题的分而治之算法_#include_03    printf(" 应用程序运行结束! ");

“快速排序算法”问题的分而治之算法_#include_03    return 0;

“快速排序算法”问题的分而治之算法_快速排序算法_07}

“快速排序算法”问题的分而治之算法_#include_08

“快速排序算法”问题的分而治之算法_#include_08