七种经典排序代码
1、冒泡排序
public class Bubble { public static void sort(int[] arr){ for(int i = 0; i < arr.length -1; i++){ for(int j = 0; j < arr.length - i -1; j++){ if(arr[j] > arr[j+1]){ swap(arr,j,j+1); } } } } private static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } }
2、插入排序
public class Insertion { public static void sort(int[] arr){ for(int i = 1; i < arr.length; i++){ for(int j = i; j > 0 && arr[j] < arr[j-1] ; j--){ swap(arr,j-1,j); } } } private static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } }
3、选择排序
public class Selection { public static void sort(int[] arr){ for(int i = 0; i < arr.length -1; i++){ int index = i; int min = arr[i]; for(int j = i; j < arr.length; j++){ if(arr[j] < min){ min = arr[j]; index = j; } } arr[index] = arr[i]; arr[i] = min; } } }
4、希尔排序
public class Shell { public static void sort(int[] arr){ int d = arr.length / 2; while(d >= 1){ for(int i = d; i < arr.length; i ++){ for(int j = i; j >= d && arr[j] < arr[j-d]; j -= d){ swap(arr,j,j-d); } } d /= 2; } } private static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } }
5、快速排序
public class Quick { public static void sort(int[] arr){ quickSort(arr, 0, arr.length - 1); } private static void quickSort(int[] arr, int start, int end) { if(end <= start){ return; } int mid = start; int base = arr[start]; int left = start; int right = end; while(left < right){ while(left < right && arr[right] >= base){ right--; } if(left < right){ arr[mid] = arr[right]; mid = right; } while(left < right && arr[left] <= base){ left++; } if(left < right){ arr[mid] = arr[left]; mid = left; } } arr[mid] = base; quickSort(arr, start, mid - 1); quickSort(arr, mid + 1, end); } }
6、归并排序
public class Merge { public static void sort(int[] arr){ build(arr, 0, arr.length - 1); } private static void build(int[] arr, int start, int end) { if(start >= end){ return; } int mid = (start + end) / 2; build(arr, start, mid); build(arr, mid + 1, end); merge(arr, start, end, mid); } private static void merge(int[] arr, int start, int end, int mid) { int[] temp = new int[arr.length]; int left = start; int right = mid + 1; int record = start; while(left <= mid && right <= end){ if(arr[left] > arr[right]){ temp[record] = arr[right]; right++; record++; }else{ temp[record] = arr[left]; left++; record++; } } while(left <= mid){ temp[record] = arr[left]; left++; record++; } while(right <= end){ temp[record] = arr[right]; right++; record++; } for(int i = start; i <= end; i++){ arr[i] = temp[i]; } } }
7、堆排序
public class Heap { public static void sort(int[] arr){ for(int i = arr.length - 1; i > 0; i--){ for(int j = (i - 1) / 2; j >= 0; j--){ if(2*j + 1 == i){ if(arr[j] <= arr[2*j + 1]){ swap(arr,j,2*j + 1); } }else{ if(arr[j] <= arr[2*j + 1]){ swap(arr,j,2*j + 1); } if(arr[j] <= arr[2*j + 2]){ swap(arr,j,2*j + 2); } } } swap(arr, 0, i); } } private static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } }
浙公网安备 33010602011771号