三大经典排序
来源:互联网 发布:淘宝店铺装修招牌图片 编辑:程序博客网 时间:2024/05/02 01:04
今天突然发现对排序有点不熟悉,便总结了一些对三大排序的理解,可能只是片面的,欢迎大家斧正 >_<
以下三大排序皆为从小到大排序
以数组a=[6, 5, 3, 1, 8, 7, 2, 4]为对象。
排序后a=[1,2,3,4,5,6,7,8]
冒泡排序
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
过程:
1、比较相邻的两个数据,如果第二个数小,就交换位置。
2、从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
3、继续重复上述过程,依次将第2.3…n-1个最小数排好位置。
for(var i = 0;i < a.length-1 ;i++){ for(var j= a.length-1;j > i ;j--){ if(a[j] < a[j-1]){ var t = a[j]; a[j] = a[j-1]; a[j-1] = t; } } }
优化冒泡算法
针对问题:数据排好后,仍进行循环。
解决方案:立个flag标志,如果发生交换则设置为true,否则设置为false
for(var i = 0;i < a.length-1 ;i++){ var flag = false ; for(var j= a.length-1;j > i ;j--){ if(a[j] < a[j-1]){ var t = a[j]; a[j] = a[j-1]; a[j-1] = t; flag = true ; } } if(!flag) break; }
选择排序
基本思想:每遍历一次都记住了当前最小元素的位置,最后仅需一次交换操作即可将其放到合适的位置。
过程:
1、在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
2、第二次遍历n-2个数,找到最小的数值与第二个元素交换;
3、第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。
for(var i = 0;i < a.length-1;i++){ var min = i; for(var j = i+1; j< a.length ;j++){ if(a[j]<a[min]){ min=j; } } if(min != i){ var t = a[i]; a[i] = a[min]; a[min] = t; } }
插入排序
基本思想:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
过程:
1、假定前n-1个数已经排好序
2、将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。
3、反复循环,直到全部排好顺序。
for(var i = 1;i < a.length;i ++){ var temp = a[i]; for(var j=i - 1; j >= 0 && a[j] >temp;j --){ a[j+1] = a[j]; } a[j+1] = temp; }
阅读全文
2 0
- 三大经典排序
- 三大经典排序法
- java:三种经典大排序汇总,冒泡,插入,选择
- 十大经典排序
- 三大线性排序
- 三大高级排序
- 三大简单排序
- 三大排序
- 十大经典排序总结
- 十大经典排序整理
- 十大经典排序算法
- 十大经典排序算法
- 十大经典排序算法
- 8大经典排序算法
- 十大经典排序算法
- Google三大经典论文
- Google三大经典论文
- 八大排序 三大查找、、
- 方法的覆盖(重写)
- "大数据如何帮助小数据?" 主题报告速记与评述(二)
- 常见的eclipse的一些快捷键
- 安装CUDA流程
- Shape图形
- 三大经典排序
- 记17年暑假训练
- EU4-13: Running a meeting
- JVM菜鸟进阶高手之路四
- jQuery对象与原生JS dom对象间的转换
- TCP定时器
- Hexo+github博客搭建
- NYOJ 51 管闲事的小明
- 数据结构之队列顺序表示与实现1