首页 > 代码库 > O(n^2)类型的几种排序算法
O(n^2)类型的几种排序算法
一、冒泡排序
1.原理
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个;
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数;
(3)针对所有的元素重复以上的步骤,除了最后一个;
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2.一个直接但是低效的实现
public void sort(int[] array) { //外层循环从第0个元素遍历到倒数第二个元素,主要是用来控制内层循环的次数 //因为外层循环每跑一次,最大的数就会到最后面 for (int i = 0; i < array.length - 1; i++) { //内层循环,遍历数组的每一个数(每一趟遍历的数量都在减小,因为最后面的是不需要比较的) //如果前面的比后面的大,就交换这俩个数 for (int j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j+1]) { int temp = array[j+1]; array[j+1] = array[j]; array[j] =temp; } } } }
3.优化版本(优化的地方是,如果遍历了一次,发现没有任何交换,那么说明已经排好序了,后面就可以不用排了)
public void sort(int[] array) { boolean swaped; int n = array.length; do { swaped = false; for (int i = 1; i < n; i++) { if (array[i - 1] > array[i]) { //如果这趟有两个元素换过位置,那么是否排过序设置成true //一旦有某一趟没有任何两个元素换过位置,说明已经排好了,整个排序过程可以停止了 int temp = array[i - 1]; array[i - 1] = array[i]; array[i] = temp; swaped = true; } } n--; } while (swaped); }
二、选择排序
三、插入排序
四、希尔排序
O(n^2)类型的几种排序算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。