简单算法java实现

xiaoxiao2021-03-01  12

冒泡排序 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 简单选择排序 每次只选择一个数据放在正确的位置直接插入排序 把数组后面那些没排序的元素换到数组前面已经排好序的部分里对应的位置 /** * 冒泡排序 */ public void bubbleSort(int[] ints) { //标记是否已经是有序 boolean flag = true; //如果已经有序则退出循环 for (int i = 1; i < ints.length - 1 && flag; i++) { flag = false; for (int j = ints.length - 1; j >= i; j--) { if (ints[j] < ints[j - 1]) { //交换元素 int temp = ints[j]; ints[j] = ints[j - 1]; ints[j - 1] = temp; //如果发生交换则继续循环 flag = true; } } } } /** * 简单选择排序 * 相对于冒泡排序减少了交换次数 */ public void selectSort(int[] ints) { for (int i = 0; i < ints.length; i++) { //默认当前下标位最小值 int min = i; for (int j = i + 1; j < ints.length; j++) { //找出最小值的下标 if (ints[min] > ints[j]) { min = j; } //如果最小值默认最小值则交换 if (min != i) { int temp = ints[min]; ints[min] = ints[i]; ints[i] = temp; } } } } /** * 直接插入排序 */ public void insertSort(int[] ints) { for (int i = 1; i < ints.length; i++) { //当前值 int temp = ints[i]; //记录需要插入的位置 int position = i; //对已经排好序的部分进行比较 for (int j = i - 1; j >= 0; j--) { //如果比当前值大,说明被比较的值需要向后移动一位,并且记住当前的下标 if (temp < ints[j]) { ints[j + 1] = ints[j]; position--; } else { //如果比当前值小说明当前值要比以排序的所有值大 break; } } //把当前值插入到记录的位置中 ints[position] = temp; } } @Test public void sort() { Random random = new Random(); int[] ints = new int[10000]; for (int i = 0; i < ints.length; i++) { ints[i] = random.nextInt(); } long start = System.currentTimeMillis(); // bubbleSort(ints); // selectSort(ints); // insertSort(ints); // System.out.println(Arrays.toString(ints)); System.out.println(System.currentTimeMillis() - start); }
转载请注明原文地址: https://www.6miu.com/read-3849962.html

最新回复(0)