小白仿写快排

来源:互联网 发布:mysql中文参考手册 编辑:程序博客网 时间:2024/06/11 15:49

本博代码为仿写一位长辈的博客代码,但忘了博名,如果有问题请联系我删除
快速排序是对冒泡排序的一种改进,使用的是分治法,主要思想为在待排序数组中找到一个关键数据(本例中为数组第一个数),设置两个参数 i和 j ,让i从头遍历 , j从尾遍历,分别找比关键数据大的数和比关键数据小的数,找到之后让i和j所指向的数交换,当i和j相等时,让i和j指向的数和关键数据交换,使得关键数据左边都比它小右边都比它大,在对左右两边再进行递归操作,是最终数组成为顺序。

 #include<stdio.h>#define N 50int Arr[N];Quick_Sort(int left,int right){    if(left>right) return 0;    int i,j,t,temp;    temp=Arr[left];    i=left;    j=right;    while(i!=j)    {        while(i<j&&Arr[j]>=temp)//  找较大位置         {            j--;        }        while(i<j&&Arr[i]<=temp)  // 找较小位置 (注意等号,上面等号可不加,下面必须加)           {            i++;        }        if(i<j)     //  交换         {            t=Arr[i];             Arr[i]=Arr[j];             Arr[j]=t;         }    }   //  填中间值     Arr[left]=Arr[i];    Arr[i]=temp;    Quick_Sort(left,i-1);  //  递归左边     Quick_Sort(i+1,right);  //  递归右边 }int main(){    int n;    int i;    scanf("%d",&n);    for(i=1;i<=n;i++) scanf("%d",&Arr[i]);    Quick_Sort(1,n);    for(i=1;i<=n;i++) printf("%d ",Arr[i]);    return 0; }
0 0