1 /** 2 * Java常用排序 3 * @author LiTaiQing 4 * 5 */ 6 public class SortTest { 7 8 /* 9 * 直接插入排序 10 * 基本思想: 11 * 在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的, 12 * 现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。 13 * 如此反复循环,直到全部排好顺序 14 */ 15 public static void insertSort(int[] arr){ 16 for(int i = 1; i < arr.length; i++){ 17 int j = i -1; 18 for(;j > 0 && arr[i] < arr[j];j--){ 19 arr[j+1] = arr[j]; 20 } 21 arr[j+1] = arr[i]; 22 } 23 } 24 25 /* 26 * 简单快速排序 27 * 基本思想: 28 * 在要排序的一组数中,选出最小的一个数与第一个位置的数交换; 29 * 然后在剩下的数当中再找最小的与第二个位置的数交换, 30 * 如此循环到倒数第二个数和最后一个数比较为止。 31 */ 32 public static void selectSort(int[] arr){ 33 for(int i = 0; i < arr.length - 1; i++){ 34 for(int j = i + 1;j < arr.length ; j++){ 35 if(arr[i] > arr[j]){ 36 arr[i] ^= arr[j]; 37 arr[j] ^= arr[i]; 38 arr[i] ^= arr[j]; 39 } 40 } 41 } 42 } 43 44 /* 45 * 冒泡排序 46 * 基本思想: 47 * 在要排序的一组数中,对当前还未排好序的范围内的全部数, 48 * 自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 49 * 即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 50 */ 51 public static void bubbleSort(int[] arr){ 52 for(int i = 0; i < arr.length - 1; i++){ 53 for(int j = 0; j < arr.length - 1 - i; j++){ 54 if(arr[j] > arr[j+1]){ 55 arr[j] += arr[j+1]; 56 arr[j+1] = arr[j] - arr[j+1]; 57 arr[j] -= arr[j+1]; 58 } 59 } 60 } 61 } 62 63 /* 64 * 希尔排序(最小增量排序) 65 * 基本思想: 66 * 算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组, 67 * 每组中记录的下标相差d.对每组中全部元素进行直接插入排序, 68 * 然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。 69 * 当增量减到1时,进行直接插入排序后,排序完成。 70 */ 71 public static void shellSort(int[] arr){ 72 int j = 0; 73 int temp = 0; 74 for (int increment = arr.length / 2; increment > 0; increment /= 2) { 75 for (int i = increment; i < arr.length; i++) { 76 temp = arr[i]; 77 for (j = i; j >= increment; j -= increment) { 78 if(temp > arr[j - increment]){ 79 arr[j] = arr[j - increment]; 80 }else{ 81 break; 82 } 83 } 84 arr[j] = temp; 85 } 86 } 87 } 88 89 /* 90 * 输出 91 */ 92 public static void out(int[] arr){ 93 System.out.print("["); 94 for(int i =0; i < arr.length - 2; i++){ 95 System.out.print(arr[i]+","); 96 } 97 System.out.println(arr[arr.length-1]+"]"); 98 } 99 100 }
时间: 2024-10-11 08:38:27