您的位置:首页 > 运维架构 > Linux

linux kernel data struct: quick sort

2013-06-11 14:28 260 查看
快速排序采用分而治之的排序方式,在一次排序后,便将整个欲排序的数组以第一个元素为为界,分为小于和大于两边;这种方式能将时间复杂度降到O(n*logn)。

以下为个人的C实现,在Dev-C上验证通过:

关于这种排序的思路,网上都有介绍,其中有种,挖了填,拆东墙补西墙的解释挺通俗易懂的,大家可以自己去了解一下;

 

#include <stdio.h>

#include <stdlib.h>

void quick_sort(int a[], int i, int j)

{

    int m = i;

    int n = j;

    int temp = 0;

   

    int x = a[i];

   

    if(i >= j)

    {

         printf("end\n");

         return;

     }

   

    printf("before:i = %d, j = %d\n",i,j);

   

    while(i < j)

    {

       do

       {

           if(a[j] < x)

           {

               a[i] = a[j];

               break;

           }

           else j--;

       }while(i < j);

      

       if(i >= j) break;;

      

      

       do

       {

           if(a[i] > x)

           {

               a[j] = a[i];

               break;

           }

           else i++;

       }while(i < j);

       if(i >= j) break;

    }

   

    if(i==j) a[i] = x;

       

    printf("after:i = %d, j = %d\n",i,j);

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

      {

            printf("% d",a[temp]);

      }   

   

         quick_sort(a,m,i-1);

         quick_sort(a,i+1,n);

     

       

   

    return;

}

int main(int argc, char *argv[])

{

  int i;

  int a[10]={4,2,8,7,9,1,3,6,5,10};

 

  quick_sort(a,0,9);

 

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

  {

        printf("% d",a[i]);

  }

 

 

  system("PAUSE"); 

  return 0;

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  quick sort 快速排序