1.希尔排序
将数组分成n组,n/2组,n/4组...1组,在每次分组后在组内进行排序。最后得到有序的数组
//通过交换的方式实现 public void sort(int[] arr) { int temp = 0; for (int gap = arr.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < arr.length; i++) { for (int j = i - gap; j >= 0; j -= gap) { if (arr[j] > arr[j + gap]) { temp = arr[j]; arr[j] = arr[j + gap]; arr[j + gap] = temp; } } } } } //通过插入的方式实现 public void sort(int[] arr) { for (int gap = arr.length / 2; gap > 0; gap /= 2) { for (int i = gap; i < arr.length; i++) { int index = i; int insertValue = arr[index]; while (index - gap >= 0 && insertValue > arr[index - gap]) { arr[index] = arr[index - gap]; index -= gap; } arr[index] = insertValue; } } }
2.快速排序
首先确定一个基准,将比该基准大的变量均放在右边,比基准小的变量放在左边。再循环这个过程。
public static void sort(int[] arr,int left,int right) { int pivot = arr[left]; int l = left; int r = right; while (r > l) { while (arr[r] >= pivot && l < r) { r--; } arr[l] = arr[r]; while (arr[l] <= pivot && l < r) { l++; } arr[r] = arr[l]; } arr[l] = pivot; if (l > left) { sort(arr,left,l-1); } if (right > l) { sort(arr,l+1,right); } }
3.归并排序
基本思想是分治,先分:将数组每次分为原来的一半,直到无法再分为止。再按照原来的路径进行合并,合并时进行排序,最后得到一个有序的数组。
public static void sort(int[] arr,int left,int right,int[] temp) { if (left < right) { int mid = (left+right)/2; sort(arr,left,mid,temp); sort(arr,mid+1,right,temp); merge(arr,left,mid,right,temp); System.out.println(Arrays.toString(arr)); } } public static void merge(int[] arr, int left, int mid, int right, int[] temp) { int l = left; int r = mid+1; int t = 0; while (l <= mid&&r <= right) { if (arr[l] < arr[r]) { temp[t] = arr[l]; t++; l++; }else { temp[t] = arr[r]; t++; r++; } } while (l <= mid) { temp[t] = arr[l]; t++; l++; } while (r <= right) { temp[t] = arr[r]; t++; r++; } t = 0; int tLeft = left; while (tLeft <= right) { arr[tLeft] = temp[t]; t++; tLeft++; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)