都是两种效率高而且常用的排序方法,今天来总结下。

 

  先说快排:

 

  首先,快速排序的时间复杂度为nlogn,其思想实质为分治法。而这分治法的基本思想为以下三点:

 

  1.先从数列中取出一个基准数。

 

  2.在分治的过程中,比这个基准数小的数全部放到这个基准数的左边,反之则放到右边。

 

  3.然后再对由第二步产生的两个区间再进行第二步的操作,当分出来的区间仅剩一个数为止。

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define maxn 1000000
int a[maxn];

void qs(int a[],int l,int r)
{
    if(l < r)
    {
        int i=l, j=r, x=a[l];
        while(i < j)
        {
            while(i<j && a[j] >= x)
                j--;
            if(i < j)
                a[i++] = a[j];
            while(i<j && a[i] < x)
                i++;
            if(i < j)
                a[j--] = a[i];
        }
        a[i] = x;
        qs(a,l,i-1);
        qs(a,i+1,r);
     }
}

void print(int a[],int n)
{
    for(int i=0; i<n; i++)
        printf("%d ",a[i]);
    printf("\n");
}

int main()
{
    int n,i;
    while(scanf("%d",&n) == 1)
    {
        srand(time(0));
        for(i=0; i<n; i++)
            a[i] = rand()%100;
        qs(a,0,n-1);
        print(a,n);
    }

    return 0;
}
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-27
  • 2022-12-23
  • 2022-01-18
猜你喜欢
  • 2022-12-23
  • 2021-08-17
  • 2021-07-09
  • 2022-12-23
  • 2022-01-30
  • 2021-08-16
相关资源
相似解决方案