冒泡排序
从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧。
在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出。
代码如下:
public static int[] sort(int[] array) { int temp = 0; // 外层循环,它决定一共走几趟 //-1为了防止溢出 for (int i = 0; i < array.length - 1; i++) { int flag = 0; //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环 //内层循环,它决定每趟走一次 for (int j = 0; j < array.length - i - 1; j++) { //如果后一个小于前一个,则换位 if (array[j + 1] < array[j]) { temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; flag = 1; } } if (flag == 0) { break; } } return array; }
选择排序
从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。
不断进行这样的操作,直到将整个数组排序。
代码如下:
public static int[] sort(int arr[]) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) {// 认为目前的数就是最小的, 记录最小数的下标 int minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (arr[minIndex] > arr[j]) {// 修改最小值的下标 minIndex = j; } }// 当退出for就找到这次的最小值,就需要交换位置了 if (i != minIndex) {//交换当前值和找到的最小值的位置 temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } } return arr; }
插入排序
每次都将当前元素插入到左侧已经排序的数组中,使得插入之后左侧数组依然有序。
代码如下:
public static int [] sort(int[] arr){ //遍历所有的数字 for(int i=1;i<arr.length;i++){ //如果当前数字比前一个数字小 if(arr[i]<arr[i-1]){ //把当前遍历数字存起来 int temp=arr[i]; int j; //遍历当前数字前面的所有数字 for(j=i-1;j>=0&&temp<arr[j];j--){ //把前一个数字赋给后一个数字 arr[j+1]=arr[j]; } //把临时变量(外层for循环的当前元素)赋值给不满足条件的后一个元素 arr[j+1]=temp; } } return arr; }