四种排序算法

来源:互联网 发布:全景摄影师 知乎 编辑:程序博客网 时间:2024/04/29 13:45

#include "stdio.h"

 

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

 

display(int a[],int n)

{

         int i;

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

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

                   printf("\n");

}

 

int qsort(int a[], int n)//快速排序算法

{

         int i = 0, j = n - 1;

         int k = a[i];

         if (0 < n - 1)

         {

                   while (i < j)

                   {

                           

                            while (i < j && a[j] > k)

                                     j--;

                            if (i < j)

                                     a[i++] = a[j];

                            while (i < j && a[i] < k)

                                     i++;

                            if (i < j)

                                     a[j--] = a[i];

                                    

                   display(a,n);

                   }

        

                   a[i] = k;

                   display(a,n);

                   qsort(a, i);

                   qsort(a + i + 1, n - i - 1);

                  

         }

return 0;

}

 

void csort(int a[], int n)//插入法

{

         int i,j;

         int min;

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

         {

                   min = a[i];

                   for ( j = n + i -1; j >= 0 && a[j] > min; j --)

                            a[j + 1] = a[j];

                            a[j + 1] = min;

         }

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

                   a[i] = a[i + n];

}

 

void msort(int a[], int n)//冒泡法

{

          int i,j;

          int key;

          for (j = 0; j < n-1; j ++)

          {

          for (i = 0;i < n - j -1;i ++)

          {

                 if (a[i] > a[i + 1])

                 {

                          key = a[i];

                          a[i] = a[i + 1];

                          a[i + 1] = key;

                 }

                 display(a,n);

          }

          }

}

 

void xsort(int a[], int n)//选择法

{

         int i,j,k;

         int min = 0,key;

         for (i = 0;i < n - 1; i ++)

         {

                   min = a[i];

                   for (j = i;j < n; j ++)

                   {

                            if (a[j] < min)

                            {

                                     min = a[j];

                                     k = j;

                            }

                   }

                   key = a[i];

                   a[i] = min;

                   a[k] = key;

         }

}

 

main()

{

         int i;

         int n = sizeof(a) / sizeof (int);

         xsort(a,n);

         display(a,n);

//      printf("\n");

//      csort(a,n);

         //display(a,n);

//      msort(a,n);

        

         return 0;

}