选择排序,冒泡排序,插入排序的小小记录
2017-10-21 16:43
232 查看
最新想复习一下以前学过的几种排序,凑合着看吧,说不准哪天又忘了,回头还得指望这篇博客呢
package me.jea.array; import java.util.Arrays; public class MyTest { public static void main(String[] args) { int[] a = new int[] { 6, 5, 4, 32 }; int[] b = (int[])a.clone(); int[] c = (int[])a.clone(); a = selectSort(a); a = bubbleSort(b); a = insertSort(c); System.out.println(Arrays.toString(a));//[4, 5, 6, 32] System.out.println(Arrays.toString(b));//[4, 5, 6, 32] System.out.println(Arrays.toString(b));//[4, 5, 6, 32] } /** * 插入排序 首先明确n个数 需要 n-1轮, * 默认将角标为1的数的左边是排序好了的 因此外循环从[1,arr.length) * 内循环扫描指定位置的左边的元素,直到找到了合适的位置, * 把需要插入的元素插入到其下一个位置 key的位置在i,那么内循环角标就在[i-1,0]递减 * 整个过程就像打扑克牌一样 * * @param a * @return */ private static int[] insertSort(int[] a) { for (int i = 1; i < a.length; i++) { int j;// 合适位置的前一位 int key = a[i];// 需要被插入的元素,方法体里面不能出现任何a[i],否则就是错的,原因不详 for (j = i - 1; j >= 0; j--) { if (a[j] > key) { a[j + 1] = a[j];// 把大的扑克牌往右挪一位,空出来的位置让给较小的key } else { break;// 这个时候,左边都比key小,那么直接把key放到下一位 } } a[j + 1] = key; } return a; } /** * 冒泡排序法: 外循环,n个数需要n-1轮 * 内循环:从左往右,一次比较两个数字,如果顺序错误(前大>后小)就交换它们 * 这样就能保持最大的数始终往后面移动 (效果是每轮后,最后一个数是最大的) * 经验总结:纵向需要arr.length-1轮, 第一次的横向两两比较需要arr.length-1次 * 并且轮数增一,次数减一,因此横向的角标就是[0,arr.length-1-i) * * @param a * @return */ private static int[] bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j < a.length - 1 - i; j++) { if (a[j] > a[j + 1]) { swap(a, j, j + 1); } } } return a; } /** * 选择排序法: 外循环:n个数需要n-1轮排序 * 内循环: 用第i个数与后面所有的数比较,并且始终保持第i个位置是最小的 * * @param a * @return */ public static int[] selectSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { for (int j = i + 1; j <= a.length - 1; j++) { if (a[i] > a[j]) { swap(a, i, j); } } } return a; } /** * * 功能:交换指定数组中不同索引的值 * * @param a * 数组 * @param i * 索引i * @param j * 索引j */ private static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } }
相关文章推荐
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)
- 基础排序——冒泡排序、选择排序、插入排序的讲解、代码实现
- C语言 冒泡排序 快速排序 直接插入排序 选择排序
- 冒泡排序, 简单选择排序, 插入排序, 希尔排序, 快速排序 js 实现
- 插入排序,选择排序,冒泡排序,归并排序
- ArraySort--冒泡排序、选择排序、插入排序工具类demo
- java实现三种简单排序以及改良:冒泡排序,选择排序,直接插入排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 插入排序,选择排序,冒泡排序等常用排序算法(java实现)
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 排序算法(一):插入排序、冒泡排序、合并排序、选择排序
- 编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序
- oc中的排序 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- python 冒泡排序 选择排序 插入排序的对比分析
- 数据结构之排序算法一冒泡排序,直接插入排序,简单选择排序
- 冒泡排序,选择排序,插入排序的比较
- 四基础排序算法:插入排序、选择排序、冒泡排序、快速排序