交换类排序(冒泡排序及快速排序)
来源:互联网 发布:淘宝网店图片处理软件 编辑:程序博客网 时间:2024/06/06 03:28
交换类排序算法的基本思想是:对带排序记录的关键字两两比较,只要发现两个记录为逆序就进行交换,直到没有逆序为止
一.冒泡排序
冒牌排序也叫相邻比较法,即在扫描带排序记录序列是,顺次比较两个记录的关键字大小,如果逆序就交换记录
动画示意(此处用http://blog.csdn.net/wall1999/article/details/55192744中的动图)
```//这里是c语言的实现,js也可以用,思想相同,稍微改动即可void BubbleSort(RecordList L){ flag=1; for(i=0;i<=L.length-1&&flag;i++)//只有flag为1才排序 { flag=0; for(j=0;j<L.length-i;j++)//注意此处为length-i,前面排过序的不必在排,去掉他们 { if(L.r[j].key>l.r[j+1].key)//如果前一个数大于后面的数就交换位置,因此此处是升序排序 { t=L.r[j]; L.r[j]=L.r[j+1]; L.r[j+1]=t; flag=1; } } } }```由上述代码可以看出,如果不需要排序,则flag不会由0改为1,因此外层循环判断不成立,不再排序。**时间复杂度:最好的情况下已经为正序,那么外层循环只进行1次就结束整个过程,最小时间代价为O(n),但最差情况下,外层循环要进行n-1次,每一次外层循环控制内层循环进行n-1次,所以为O(n^2)**
二.快速排序
数据结构中描述快速排序的基本思想为:从带排序序列中任选一个作为‘枢轴’,小于枢轴的移动在枢轴前,大于的移动到枢轴后,一趟排序后无序序列被分为左右两个子序列,然后分别对分隔所得的子序列递归地进行快速排序,以此类推,直到每个子序列只含有一个记录为止。
function QKSort(myArr){ // 如果只有一位,就没有必要比较 if(myArr.length<=1){ return myArr; } // 获取中间值的索引 var len = Math.floor(myArr.length/2); // 截取中间值 var cur = myArr.splice(len,1)[0];//从中间值的位置删除一项,即把中间值从原数组中提出来,并复制给cur,因为splice会返回一个包含被删除项的数组 // 小于中间值放这里面 var left = []; // 大于的放着里面 var right = []; for(var i=0;i<myArr.length;i++){ // 判断是否大于 if(cur>myArr[i]){ left.push(myArr[i]); }else{ right.push(myArr[i]); } } // 通过递归,上一轮比较好的数组合并,并且再次进行比较。 return QKSort(left).concat(cur,QKSort(right)); }
阅读全文
0 0
- 交换类排序(冒泡排序及快速排序)
- 交换排序(冒泡排序、快速排序)
- 交换排序(冒泡排序、快速排序)
- 交换排序(快速排序 冒泡排序)
- 交换排序(冒泡排序--快速排序)
- 排序-交换类排序-快速排序、归并排序、冒泡排序
- Java---交换类排序(冒泡排序,快速排序)
- 交换排序-(冒泡、快速排序)
- 交换排序(冒泡,快速排序)
- 排序算法----交换排序(冒泡排序,快速排序)
- 算法排序-交换排序(冒泡排序,快速排序)
- 排序:交换排序(冒泡排序、快速排序)
- 【排序】交换排序(冒泡排序、快速排序)
- 【排序三】交换排序(冒泡排序&&快速排序)
- 交换排序----冒泡排序 和 快速排序
- 交换排序:冒泡排序和快速排序
- 交换排序(冒泡排序,快速排序)
- 交换排序:冒泡排序,快速排序
- Hdoj2010水仙花数
- android 面试中或者开发中会提到关于内存泄漏或者内存溢出的问题
- JavaScript 基础知识
- Codeforces Round #425 (Div. 2)
- Qt实例digitalclock详解
- 交换类排序(冒泡排序及快速排序)
- 第一章:Chrome 浏览器 搭建 selenium 环境
- linkurious.js实现Louvain社区发现算法
- Eclipse进入debug模式提示45s超时的解决办法
- Scala之偏函数
- python代码优化
- 中国科技发展得越快石英晶振的需求量就越大
- Mongodb 数据文件结构
- 总结一下js里面的关键字