选择,冒泡,快速排序
2015-10-23 20:41
246 查看
排序算法是算法中比较基础的,在这里先对三种最简单的排序算法做个总结。
一、选择排序
大致思路为:依次选择无序区的最小值和无序区的第一个值交换。
代码:
时间复杂度为n^2。
二、冒泡排序
大致思路:就像冒泡泡一样,轻的向上浮,重的向下沉。
代码:
时间复杂度为n^2。
三、快速排序
思路:选定一个基准值,使所有比它小的数在它左边,比它大的数在右边。
代码:
时间复杂度为nlgn。
一、选择排序
大致思路为:依次选择无序区的最小值和无序区的第一个值交换。
代码:
void exchange(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; return; } void selection_sort(int a[],int len) { int i,j; for(i=0;i<len-1;i++) for(j=i+1;j<len;j++) if(a[j]<a[i]) exchange(&a[i],&a[j]); return; }
时间复杂度为n^2。
二、冒泡排序
大致思路:就像冒泡泡一样,轻的向上浮,重的向下沉。
代码:
void bubble_sort(int a[],int len) { int i,j; for(i=0;i<len-1;i++) for(j=0;j<len-1-i;j++) if(a[j]>a[j+1]) exchange(&a[j],&a[j+1]); return; }
时间复杂度为n^2。
三、快速排序
思路:选定一个基准值,使所有比它小的数在它左边,比它大的数在右边。
代码:
void quick_sort(int a[],int left,int right) { if(left>=right) return; int i=left; int j=right; int key=a[left]; while(i<j) { while(i<j&&key<=a[j]) j--; if(i<j) a[i++]=a[j]; while(i<j&&key>a[i]) i++; if(i<j) a[j--]=a[i]; } a[i]=key; quick_sort(a,left,i-1); quick_sort(a,i+1,right); }
时间复杂度为nlgn。
相关文章推荐
- 40.Sqrt(x) (二分查找)
- Jrebel实现Jetty 热部署
- javascript基础之七(函数闭包中this的变化)
- python opencv入门(读 / 写 显示以及转换图像 和 视频读入)
- mongoDB数据库的查询操作
- 用JS写的简单的猜数的游戏,一个是步数限制的,一个是有时间限制的。
- 深入沟通的重要性——《大道至简》第四章读后感
- 关于需要重新/额外打印的内容
- 《软件需求工程》 读书笔记之二
- C语言基础之Printf用法
- POJ 2386 Lake Counting DFS
- poj 1141 Brackets Sequence(区间DP记录路径)
- thinkphp——通过在线编辑器添加的内容在模板里正确显示(只显示内容,而不是html代码)
- Leetcode -- Merge k Sorted Lists
- 我前妻的故事(一个初中肄业生的奋斗)
- JAVA除去制定字符的方法
- POJ 2192 【DP】
- hdoj--2767--Proving Equivalences (scc+缩点)
- HDOJ 2112 HDU Today(最短路--dijkstra)
- 解决方法参数为arg0,arg1的问题