Java算法02-排序
一、冒泡排序
1.算法思想:
两个数比较大小,将较大的数冒到后面(或前面)
-
比较数组中相邻的两个数,如果前面的数比后面的数大,则交换两个数的位置。
-
将一个数组从前到后重复步骤1所做工作,结束时最大的数会排到最后面
-
对数组中所有数字重复执行以上步骤,除了每次排到最后的数
-
重复执行步骤1~3,直到排序完成,重复次数一般为 数组长度-1
3.动图演示:
4.代码实现
/** * 1.冒泡排序 */ public static void bubbleSort(int[] arr) { for (int i = 0;i < arr.length - 1;i++) { /** * 数组从前到后两两比较共需要比较(数组长度-1)次,也就是arr.length - 1次 * 每次比较出的最大数不参与下次比较,故每次都要比较arr.length - 1 -i次 */ for (int j = 0;j < arr.length - 1 - i;j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
结果:
1 2 3 4 5
二、插入排序
1.算法思想
跟整理扑克牌一样,先假定前n-1个数已经排列好了,将第n个数插入到前面已经排列好的序列中,使得这n个数也排列好顺序,循环反复,直到整个数组排列完毕。
2.算法描述
-
-
取出下一个元素,在已经排序的元素序列中从后向前扫描;
-
如果该元素(已排序)大于新元素,将该元素移到下一位置;
-
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
-
将新元素插入到该位置后;
-
重复步骤2~5。
3.动图演示
/** * 2.插入排序 */ public static void insertSort (int[] arr) { for (int i = 1; i < arr.length; i++) { int temp = arr[i]; for (int j = i - 1; j >= 0; j--) { if (arr[j] > temp) { //如果新元素小于已排序的元素,那么就将该已排序的元素往后移一位 arr[j + 1] = arr[j]; //如果新元素比到第0位,那么说明新元素就是最小的元素 if (j == 0) { arr[0] = temp; } } else { //如果新元素大于已排序的元素,那么就将新元素插入到该已排序的元素的后面 arr[j + 1] = temp; break; } } } }
三、选择排序
1.算法思想
每次找剩余的数中最小(或最大)的排在前面
2.算法描述
-
-
将第一个数与剩余的数依次比较,找出最小的数,将该数与第一个数交换
-
每次从有序数列后一位开始执行1~2步,直到排序完成
3.动图演示
/** * 3.选择排序 */ public static void chooseSort (int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int min = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j; } } int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } }
参考文章: