算法——快速排序
2017-09-17 11:21
274 查看
基本思想:
例子:
C语言代码一:
C语言代码二(算法导论版):
通过一趟快速排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 每一趟排序中,都确定一个基准数,把比它小的都放左边,比它大的放右边,这个过程的算法可以结合其他算法,本文中举出了以下两个例子。 快速排序的时间复杂度一般为:O(nlogn),最坏的情况是O(n^2),但这种情况很少见。
例子:
给定一个整形数组,长度不确定,元素不确定,使用快速排序将其从小到大排序。
C语言代码一:
#include <stdio.h> #include <malloc.h> #include <stdlib.h> void sort(int *array,int start,int end){ int i=start,j=end,key=start; int e=0; while(i!=j){ for(;j!=i;j--){ if(array[j]<array[key]){ e=array[key]; array[key]=array[j]; array[j]=e; key=j; break; } } for(;i!=j;i++){ if(array[i]>array[key]){ e=array[key]; array[key]=array[i]; array[i]=e; key=i; break; } } } if(i-1>start) sort(array,0,i-1); if(i+1<end) sort(array,i+1,end); }//快速排序 int main(){ int *arr,n,i; //数组初始化 printf("请输入数组长度:"); scanf("%d",&n); arr=(int*)malloc(n*sizeof(int)); printf("请输入数组:"); for(i=0;i<n;i++){ scanf("%d",&arr[i]); } printf("\n\n"); //遍历排序前数组 for(i=0;i<n;i++) printf("%3d",arr[i]); printf("\n"); //排序 sort(arr,0,n-1); //遍历排序后数组 printf("\n\n"); for(i=0;i<n;i++) printf("%3d",arr[i]); printf("\n"); free(arr); return 0; }
C语言代码二(算法导论版):
详情参见:《算法导论》
#include <stdio.h> #include <malloc.h> #include <stdlib.h> void sort(int *array,int start,int end){ int i=start,j=start,key=array[end]; int e=0; for(;j<end;j++){ if(array[j]<key){ e=array[i]; array[i]=array[j]; array[j]=e; i++; } } array[end]=array[i]; array[i]=key; if(i-1>start) sort(array,start,i-1); if(i+1<end) sort(array,i+1,end); }//快速排序 int main(){ int *arr,n,i; //数组初始化 printf("请输入数组长度:"); scanf("%d",&n); arr=(int*)malloc(n*sizeof(int)); printf("请输入数组:"); for(i=0;i<n;i++){ scanf("%d",&arr[i]); } printf("\n\n"); //遍历排序前数组 for(i=0;i<n;i++) printf("%3d",arr[i]); printf("\n"); //排序 sort(arr,0,n-1); //遍历排序后数组 printf("\n\n"); for(i=0;i<n;i++) printf("%3d",arr[i]); printf("\n"); free(arr); return 0; }
相关文章推荐
- 桶排序、冒泡排序、快速排序 -- 算法学习 小结篇
- 快速排序 php实现 算法学习
- 快速排序--(参考算法导论p146)
- 8大内部排序算法学习笔记--(2)快速排序 Java实现
- 【算法】分治法(快速排序,归并排序)
- 算法入门学习----2.2快速排序
- 经典快速排序,linux纯C实现。注意swap方法,并且这个算法还需再敲写15篇。
- 白话经典算法系列之六 快速排序 快速搞定(转)
- 算法整理(四):浅析快速排序的优化问题
- 算法竞赛——快速排序
- 【算法导论】快速排序java实现
- 第十六周 项目一 验证算法(4)快速排序
- 【转】白话经典算法系列之六 快速排序 快速搞定
- 第16周项目1-验证算法(4)快速排序 以中间位置的元素作为基准
- 常用算法之-快速排序
- 算法导论之排序:快速排序、归并排序、计数排序、基数排序、桶排序
- 算法-快速排序
- 最坏情况快速排序的运行时间为Ο(nlgn)的算法
- java必须知道的八大种排序算法:冒泡排序、 选择排序、插入排序、快速排序、希尔算法、归并排序算法、基数排序、堆排序算法
- 算法09:快速排序——分治法Part5