zoukankan      html  css  js  c++  java
  • C语言快排

    C语言使用快排的方式有两种,1、直接用库函数stdlib.h里的qsort函数 2、自己编写快排代码(第一种方便,第二种较为自由)

    qsort 的函数原型是:
    void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
    它的参数为:

    1 待排序数组首地址
    2 数组中待排序元素数量
    3 各元素的占用空间大小
    4 指向函数的指针,用于确定排序的顺序

    下面附上样例代码:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int comp(const void*a,const void*b)
     4 {
     5 return *(int*)a-*(int*)b;
     6 }
     7 int main()
     8 {
     9     int *array;
    10     int n;
    11     scanf("%d",&n);
    12     array=(int*)malloc(n*sizeof(int));
    13     int i=0;
    14     for(;i<n;i++)
    15     {
    16         scanf("%d",(array+i));
    17     }
    18     qsort(array,n,sizeof(int),comp);
    19     for(i=0;i<n;i++)
    20     {
    21         printf("%d	",array[i]);
    22     }
    23     free(array);
    24     array=NULL; 
    25     return 0;
    26 }

    另外自己编一个快排代码也是很方便的,对于初学者学会快排代码也是很有必要的。

    下面说一下快排的基本思想。快排是冒泡的改进版,基本思想是选中要排序序列中的一个数,然后让它左边的数都比它小,右边的数都比它大(如果要降序的话就反之),如此递归即可。下面附上代码:

    #include<stdio.h>
    
    void qsort(int *a,int l,int r)
    {
        int i=l;
        int j=r;
        int mid=a[(l+r)/2];
        int temp;
        while (i<j)
        {
            while (a[i]<mid) i++;
            while (a[j]>mid) j--;
            if (i<=j)
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
                i++;
                j--;
            }
        }
        if (l<j) qsort(a,l,j);
        if (i<r) qsort(a,i,r);
    }
    
    int main()
    {
        int n;
        scanf("%d",&n);
        int a[11]={};
        int i;
        for (i=1;i<=n;i++) {
            scanf("%d",&a[i]);
        }
        qsort(a,1,n);
        for (i=1;i<=n;i++) {
            printf("%d |",a[i]);
        }
        return 0;
    }

     了解了思想之后可以拓展双关键字快排。见博客。

  • 相关阅读:
    剑指offer 面试26题
    剑指offer 面试25题
    剑指offer 面试24题
    剑指offer 面试23题
    剑指offer 面试22题
    剑指offer 面试19题
    剑指offer 面试20题
    剑指offer 面试21题
    剑指offer 面试18题
    剑指offer 面试17题
  • 原文地址:https://www.cnblogs.com/itlqs/p/4750049.html
Copyright © 2011-2022 走看看