冒泡,插入,选择排序算法思路+java代码

冒泡,插入,选择排序算法思路+java代码 冒泡排序遍历数组通过两两交换每次最大的数到最后面进行arr.length-1次每次循环让数两两比较内层循环长度递减如果数组里面没有交换位置说明已经有序停止比较//冒泡排序 public static int[] sort2(int [] num){ boolean flagfalse; for(int i0;inum.length-1;i){ for(int j0;jnum.length-1-i;j){ if(num[j]num[j1]){ int tempnum[j]; num[j]num[j1]; num[j1]temp; flagtrue; } } if(!flag){ break; } } return num; }插入排序遍历arr.lenght-1次将数插入进去拿到的第一个数是有序的每遍历无序区域的一个数拿到一个数用一个变量存储避免后面移动时数被覆盖然后用这个数从后往前和已经有序的数作比较有序区域的数字比要插入数字大就往后移动一位有序区域扩展一位遇到小于或者等于这个待插入数字时就不在移动这时指针指向的数是小于或者等于待插入数的下标让待插入数字在这个数的后面public static int[] sort1(int [] num){ for(int i1;inum.length;i){ int tempnum[i];//无序的第一个数 int ji-1;//无序的最后一个数就在有序第一个数的前面 while(num[j]temp) { num[j1]num[j]; j--; } num[j1]temp; } return num; }选择排序数组时无序的让数组的最小的数和数组的第一个数交换剩下的最小的数和第二个数交换剩下的第三小的以此类推循环arr.length-1次数让数字排到前面循环剩下的数找到最小的数所在的下标每次把第一个数作为最小的数是通过每次找到最小的数的下标让这个下标所在位置和数和数组第一个位置的数交换public static int[] sort3(int [] num){ for(int i0;inum.length-1;i){ int fi;//每次那数组的第一个数作为用来作比较的数 for(int ji1;jnum.length;j){ if(num[j]num[f]){ fj; }//不需要知道数字只需要知道数组最小的数所在的下标 } int tnum[i]; num[i]num[f]; num[f]t; } return num; }三种算法的时间复杂度空间复杂度比较排序算法最好时间复杂度最坏时间复杂度平均时间复杂度空间复杂度稳定性冒泡排序O(n)O(n²)O(n²)O(1)稳定插入排序O(n)O(n²)O(n²)O(1)稳定选择排序O(n²)O(n²)O(n²)O(1)不稳定1. 冒泡排序Bubble Sort最好数组已经有序→ 只遍历 1 轮 →O(n)最坏 / 平均逆序 →O(n²)空间只用了临时变量 →O(1)稳定相同值不交换位置2. 插入排序Insertion Sort最好数组已经有序→ 每个数只需比较 1 次 →O(n)最坏 / 平均逆序 →O(n²)空间O(1)稳定实际比冒泡快很多移动少赋值比交换快3. 选择排序Selection Sort最好 最坏 平均 O (n²)无论你有序无序每次都要找最小值跑不掉空间O(1)不稳定会打乱相同元素顺序