算法——快速排序
来源:互联网 发布:川一硅藻泥怎么样知乎 编辑:程序博客网 时间:2024/06/13 19:22
基本思想:
通过一趟快速排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。每一趟排序中,都确定一个基准数,把比它小的都放左边,比它大的放右边,这个过程的算法可以结合其他算法,本文中举出了以下两个例子。快速排序的时间复杂度一般为: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;}
阅读全文
0 0
- 排序算法—快速排序
- 排序算法—快速排序
- 【算法】——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法导论—快速排序
- 啊哈!算法—快速排序
- 排序算法———快速排序
- 排序算法(一)——快速排序
- 排序算法——快速排序
- 排序算法——快速排序
- 经典排序算法——快速排序
- Linux之NAT下不能连接网络-yellowcong
- 一周学习HTML5+CSS基础知识(二)
- matplotlob-直方图
- 关于sqlite的学习小记,求各位大大指导
- 实战:CAS搭建
- 算法——快速排序
- Java第1周-打印九九乘法表
- java计划
- python零碎知识(6)--魔法方法、属性和迭代器
- C# 依据DataTable创建透视表
- JS堆栈和拷贝的理解
- 全面的Android文件目录解析和获取方法(包含对6.0系统的说明) simen201310 2016-08-28 15:52:12 浏览3290 评论0 移动开发与客户端 android 摘要
- Sony vegas Pro 14 v14.0中文版 附激活说明
- 源码分析Ambari的DAG是如何做的