基本快速排序

来源:互联网 发布:开淘宝用什么电脑配置 编辑:程序博客网 时间:2024/06/16 19:29
基本思路:

每次确定数组中的中间那个数,然后分治两端的数组,直到要分治的数组只有一个数;


#include<stdio.h>void quicksort(int a[10000],int first,int last){    if(first<last)           //如果该数组只有一个数即跳出,    {        int i=first,j=last;        int key=a[first];    //每次去第一个数作为key;        while(i<j)           //如果i==j,即已经达到目标:把整个数组中大于key的放在后面,把小于key的放在前面        {            while(i<j&&a[j]>=key)            {                j--;            }            if(i<j)            {                a[i]=a[j];            }            while(i<j&&a[i]<key)            {                i++;            }            if(i<j)            {                a[j]=a[i];                j--;            }        }        a[i]=key;                //中间值key;        quicksort(a,first,i-1);    //然后分治,中间的数已经确定下来了,然后分治前面和后面的数组        quicksort(a,i+1,last);     //如果分治的数组只有一个数,即已经排好序了    }}int main(){    int n,a[10000],i;    while(scanf("%d",&n)!=EOF)    {        for(i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        quicksort(a,0,n-1);        for(i=0;i<n;i++)        {            printf("%d ",a[i]);        }        printf("\n");    }}


0 0
原创粉丝点击