快速排序递归

Posted 大强的小窝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序递归相关的知识,希望对你有一定的参考价值。

找男朋友最好找程序员,因为程序员每天都在想我到底错在了哪里。



我真的是太太太南拳北腿、西葫芦掌上明珠。今天上午看一个程序,突然想个人再写一次快速排序算法。分治算法,上次写了一次,写的不够准确,然后照着别人的思路写了一遍。

今天上午大部分时间都在写这个程序,没有解决。不想按着别人的敲一遍了,于是一直debug。蒟蒻。一直没有解决这个问题,下午继续写着。开始怀疑我是不是没有吃这碗饭的能力。



功夫不负有心人啊。终于出来了,真的有些质疑了。

```

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

#define Max 10

void quickSort(int *array, int first, int last);

void print(int array[]);

void swap(int *sw1,int *sw2);

int main()

{

    //写一个速排序算法

    int array[Max];

    srand((unsigned int)(time(NULL)));

    int k=10;

    while(k--){

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

            array[i]=rand()%100;

        }

        //print(array);

        quickSort(array,0,Max-1);

        print(array);

        //int t;

        //scanf("%d",&t);

    //print(array);

    }

}

void print(int array[]){

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

        printf("%d\t",array[i]);

        if(i>0){

            if(array[i]<array[i-1])

                printf("\nError!\n");

        }

        if((i+1)%5==0)

            printf("\n");

    }

    printf("\n");

}

void swap(int *sw1,int *sw2){

    int temp=*sw1;

    *sw1=*sw2;

    *sw2=temp;

}


void quickSort(int array[],int first,int last){

    if(first>=last){

        return;

    }

    int begin = array[first];

    int i=first+1;

    int j=last;

    while(i<j){

        while(j>i&&(array[j]>=begin)){

            j--;

        }

        while(i<j&&(array[i]<begin)){

            i++;

        }

        swap(&array[i],&array[j]);      //交换前后的顺序

    }

    if(array[first]>array[i])

        swap(&array[first],&array[i]);

    //print(array);

    quickSort(array,first,i-1);

    //printf("\n------%d--------\n",count);

    quickSort(array,i,last);

}

必须加几个slogan.不然怎么能显示出AC格。

雄关漫道真如铁,而今迈步从头越。

路虽远,行则将至。事虽难,做则必达。


以上是关于快速排序递归的主要内容,如果未能解决你的问题,请参考以下文章

快速排序:递归与非递归

算法排序3:优化版快速排序非递归实现快速排序

算法排序3:优化版快速排序非递归实现快速排序

算法排序3:优化版快速排序非递归实现快速排序

数据结构大量数据(20万)的快速排序的递归与非递归算法三数取中思想

快速排序复杂度分析