快速排序

来源:互联网 发布:阿里金融云 编辑:程序博客网 时间:2024/05/26 05:51

快速排序

  快速排序是一种有效的排序算法。虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在内存使用、程序实现复杂性上表现优秀,尤其是对快速排序算法进行随机化的可能,使得快速排序在一般情况下是最实用的排序方法之一。

快速排序被认为是当前最优秀的内部排序方法。

     快排可以用递归来实现,比如对于一个数组a,将它从小到大排列;

(1)首先把第一个数令它下标为low,最后一个下标为high,将a[low]用变量val来保存;

(2)其次我们要做的就是把找到val(也就是a[low])在这个数组中从小到大排列后的位置;

(3)然后这个数组就被我们根据val分成两半了,然后在对这两半重复之前的操作,直到顺序完全排好。

#include<stdio.h>#include<stdlib.h>//寻找位置,low和high分别是数组的起始和终止下标 int FindPos(int *a,int low,int high){int val;val = a[low];while(low < high){while(low < high && a[high]>=val){--high;}a[low] = a[high];while(low < high && a[low]<=val){++low;}a[high]=a[low];}a[low]=val;return low;}//利用递归来进行排序 void QuickSort(int *a,int low,int high){int pos;if(low < high){ pos=FindPos(a,low,high); QuickSort(a,low,pos-1); QuickSort(a,pos+1,high);}}int main(void){    int *a;    int n,i;    printf("input array lenght:");    scanf("%d",&n);    //动态开辟一个数组,可以自定义排序的数字个数     a = (int *)malloc(sizeof(int)*n);    printf("the array:");    for(i = 0;i < n;i++)    {    scanf("%d",&a[i]);    }    QuickSort(a,0,n-1);    printf("the result:");     for(i = 0;i < n;i++)    {    printf("%d ",a[i]);    }return 0;}


0 0
原创粉丝点击