排序算法之快速排序

来源:互联网 发布:python ruby 哪个好 编辑:程序博客网 时间:2024/06/08 17:15

快速排序

思想:快速排序的思想更为深刻,随意选取一个数(一般选择a[0])作为基准值,然后在数组的左右两边设置两个哨兵,先让右边的哨兵进行巡逻,找到比基准值小的数;再让左边的哨兵进行巡逻,找到比基准值大的数,将两者交换。这里注意要先让右边的哨兵先出动。左右哨兵都找到后将找到的数据调换,就这样左右两个哨兵一直寻找一直调换,最后左右哨兵会相遇。由于总是右边的哨兵先寻找,所以最后找到的数字一定是比起始值小的数,这样就可以和起始的a[0]调换,这也就解释了为什么一定要右边的哨兵先移动。如果让左边的哨兵先移动,就会找到比起始值大的数,此时就不容易调换了。将起始值与相遇值调换之后,左右两侧再采用故技重施即可!

//给定数组快速排序,从小到大排列。

 

#include <stdio.h>

 

int a[10]={1,23,41,31,45,767,48,90,6,88};

 

void quicksort(int left,int right)

{

         inti,j,temp,t;

         if(left>right)

                   return;

 

         i=left;

         j=right;

         temp=a[left];

         while(i!=j)

         {

                   while(a[j]>=temp&&j>i)

                            j--;

                   while(a[i]<=temp&&j>i)

                            i++;

                   if(j>i)

                   {

                            t=a[i];

                            a[i]=a[j];

                            a[j]=t;

                   }

         }

         a[left]=a[i];

         a[i]=temp;

         quicksort(left,i-1);

         quicksort(i+1,right);

}

 

int main()

{

        

         intk;

 

         printf("\nThesorted numbers are:\n");

         quicksort(0,9);

         for(k=0;k<10;k++)

         {       

                   printf("%5d",a[k]);

         }

         printf("\n\nend\n");

}

 

 

 

 

//给定数组快速排序,从小到大排列。

 

#include <stdio.h>

 

int p;

         intk;

 

int a[1000];

 

void quicksort(int left,int right)

{

         inti,j,temp,t;

         if(left>right)

                   return;

 

         i=left;

         j=right;

         temp=a[left];

         while(i!=j)

         {

                   while(a[j]>=temp&&j>i)

                            j--;

                   while(a[i]<=temp&&j>i)

                            i++;

                   if(j>i)

                   {

                            t=a[i];

                            a[i]=a[j];

                            a[j]=t;

                   }

         }

         a[left]=a[i];

         a[i]=temp;

         quicksort(left,i-1);

         quicksort(i+1,right);

}

 

int main()

{

         for(p=0;p<1000;p++)

         {        a[p]=1000-p;

         }

         printf("\nThe  numbers are:\n");

         for(k=0;k<1000;k++)

         {       

                   printf("%5d",a[k]);

         }

         printf("\n\nThesorted numbers are:\n");

         quicksort(0,999);

         for(k=0;k<1000;k++)

         {       

                   printf("%5d",a[k]);

         }

         printf("\n\nend\n");

}

原创粉丝点击