1 package com.dongbin.sort; 2 3 import java.util.Arrays; 4 5 /** 6 * 排序 7 * @author dongbin 8 * 9 */ 10 public class AllSort { 11 12 public static void main(String[] args) { 13 int[] arr = {1,32,43,11,23,45}; 14 MergeSort(arr); 15 System.out.println(Arrays.toString(arr)); 16 } 17 18 /** 19 * 冒泡排序 20 * @param arr 21 * @return 22 */ 23 public static int[] BubbleSort(int[] arr){ 24 25 for(int i=0;i<arr.length-1;i++){ 26 for(int j=i+1;j<arr.length;j++){ 27 if(arr[i]>arr[j]){ 28 int temp = arr[i]; 29 arr[i] = arr[j]; 30 arr[j] = temp; 31 } 32 } 33 } 34 return arr; 35 } 36 37 /** 38 * 选择排序 39 * @param arr 40 * @return 41 */ 42 public static int[] SelectionSort(int[] arr){ 43 44 int min; 45 for(int i=0;i<arr.length-1;i++){ 46 min=i; 47 for(int j=i+1;j<arr.length;j++){ 48 if(arr[i]>arr[j]){ 49 min = j; 50 } 51 } 52 53 if(min!=i){ 54 int temp = arr[i]; 55 arr[i] = arr[min]; 56 arr[min] = temp; 57 } 58 } 59 return arr; 60 } 61 62 /** 63 * 插入排序 64 * @param arr 65 * @return 66 */ 67 public static int[] InsertSort(int[] arr){ 68 69 for(int i=1;i<arr.length;i++){ 70 int current = arr[i]; 71 int pos = i; 72 for(int j=i-1;j>=0;j--){ 73 if(arr[j]>current){ 74 arr[j+1] = arr[j]; 75 pos = j; 76 } 77 } 78 arr[pos]=current; 79 } 80 return arr; 81 } 82 83 /** 84 * 快速排序 85 * @param arr 86 * @return 87 */ 88 public static int[] QuickSort(int[] arr){ 89 if(arr.length<=1){ 90 System.out.println("传入的数组长度小于或等于1"); 91 }else{ 92 _quickSort(arr, 0, arr.length-1); 93 } 94 95 return arr; 96 } 97 98 public static void _quickSort(int[] arr ,int start, int end){ 99 if(start>=end){ 100 return; 101 } 102 103 int i = start,j=end,current = arr[j]; 104 boolean flag = false; 105 106 while(i!=j){ 107 if(flag){ 108 if(arr[j]<current){ 109 int temp = arr[j]; 110 arr[j] = arr[i]; 111 arr[i] = temp; 112 flag = false; 113 }else j--; 114 }else{ 115 if(arr[i]>current){ 116 int temp = arr[j]; 117 arr[j] = arr[i]; 118 arr[i] = temp; 119 flag = true; 120 }else i++; 121 } 122 } 123 124 _quickSort(arr, start, i-1);//左边 125 _quickSort(arr, j+1, end);//右边 126 } 127 128 129 /** 130 * 归并排序 131 * @param arr 132 * @return 133 */ 134 public static int[] MergeSort(int[] arr){ 135 _mergeSort(arr, 0, arr.length-1); 136 return arr; 137 } 138 139 public static void _mergeSort(int[] arr,int left,int right){ 140 141 if (left < right) { 142 int mid = (left + right) / 2; 143 // 划分 144 _mergeSort(arr, left, mid); 145 _mergeSort(arr, mid + 1, right); 146 147 // 合并 148 _merge(arr, left, mid, right); 149 } 150 151 } 152 public static void _merge(int[] arr,int left,int mid,int right){ 153 154 int[] newArr = new int[arr.length];//新数组 155 int center = mid+1; 156 int tmp = left; 157 int pos = left; 158 159 while(left<=mid&¢er<=right){ 160 if(arr[left]<=arr[center]){ 161 newArr[pos++]=arr[left++]; 162 }else{ 163 newArr[pos++]=arr[center++]; 164 } 165 } 166 167 while(left<=mid){ 168 newArr[pos++]=arr[left++]; 169 } 170 171 while(center<=right){ 172 newArr[pos++]=arr[center++]; 173 } 174 175 while(tmp<=right){ 176 arr[tmp] = newArr[tmp++]; 177 } 178 179 180 181 } 182 }