1 public class sort { 2 public static void main(String[] args) { 3 int[] arr = {2, 5, 3, 4, 8, 5, 1}; 4 //sort_insert(arr); 5 //sort_bin(arr); 6 //sort_bubble(arr); 7 sort_quick(arr,0,6); 8 //sort_select(arr); 9 for (int i = 0; i < arr.length; i++) { 10 System.out.print(arr[i] + " "); 11 } 12 } 13 14 //直接插入排序 15 public static void sort_insert(int[] arr) { 16 int n = arr.length; 17 int temp; 18 for (int i = 1; i < n; i++) { 19 if (arr[i] < arr[i - 1]) {//如果后面的小于前面的 20 int j = i - 1; 21 temp = arr[i];//因为往后会淹没要插入的 22 //下面的while是只要大于就后移一位,直到可以插入 23 while (j >= 0 && temp < arr[j]) { 24 arr[j + 1] = arr[j]; 25 j--; 26 } 27 arr[j + 1] = temp; 28 } 29 } 30 } 31 32 //折半插入排序 33 public static void sort_bin(int[] arr) { 34 int i, j, low, high, mid, temp; 35 int n = arr.length; 36 for (i = 1; i < n; i++) { 37 temp = arr[i]; 38 low = 0; 39 high = i - 1; 40 while (low <= high) { 41 mid = (low + high) / 2; 42 if (temp > arr[mid]) { 43 low = mid + 1; 44 } else { 45 high = mid - 1; 46 } 47 } 48 for (j = i; j > low; j--) { 49 arr[j] = arr[j - 1]; 50 } 51 arr[low] = temp; 52 53 } 54 55 } 56 57 //冒泡排序 58 public static void sort_bubble(int[] arr) { 59 for (int i = 0; i < arr.length; i++) { 60 for (int j = 0; j < arr.length - i - 1; j++) { 61 if (arr[j] > arr[j + 1]) { 62 int temp = arr[j]; 63 arr[j] = arr[j + 1]; 64 arr[j + 1] = temp; 65 } 66 } 67 } 68 } 69 70 //快速排序 71 public static void sort_quick(int[] arr, int left, int right) { 72 int temp; 73 int i = left, j = right; 74 if (left < right) { 75 temp = arr[left]; 76 //完成一趟循环,将数组小于temp的放在左边,大于temp的放在右边 77 while (i != j) {//相等时候说明相遇了,此时i的位置就是插入的位置 78 //从右往左找到一个小于temp的元素 79 while (j > i && arr[j] > temp) { 80 --j; 81 } 82 if (i < j) { 83 arr[i] = arr[j]; 84 ++i;//指针右移动一位 85 } 86 //从左往右找,找到一个大于temp的元素 87 while (i < j && arr[i] < temp) { 88 i++; 89 } 90 if (i < j) { 91 arr[j] = arr[i]; 92 j--;//指针向前一位,刚移动的 93 } 94 95 } 96 arr[i] = temp; 97 sort_quick(arr, left, i - 1); 98 sort_quick(arr, i + 1, right); 99 } 100 101 } 102 103 //简单选择排序,在无序序列选最小的放到有序的上面 104 public static void sort_select(int[] arr) { 105 for (int i = 0; i < arr.length; i++) { 106 //记住最小的序号,默认第一个 107 int min = i; 108 for (int j = i + 1; j < arr.length; j++) { 109 if (arr[j] < arr[min]) { 110 min = j; 111 } 112 } 113 //交换当前i序号与得到最小的 114 int temp = arr[i]; 115 arr[i] = arr[min]; 116 arr[min] = temp; 117 } 118 } 119 }
浙公网安备 33010602011771号