public class QuickSorted { public static void main(String[] args) { int[] a = new int[10]; for(int i = 0; i < a.length; i++) { a[i] = Math.round((int) (Math.random() * 50)); } //排序前的顺序 System.out.print("排序前:"); for(int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } QuickSorted qs = new QuickSorted(); //qs.sorted(a, 0, a.length - 1); qs.insertSorted(a); System.out.println(); //排序后的顺序 System.out.print("排序后:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } //验证排序是否正确 System.out.println(); for(int i = 0; i < a.length - 1; i++) { if(a[i] > a[i + 1]) { System.out.println("排序错误,位置在第 " + i + "个元素"); break; } } } //快速排序 public void sorted(int[] a, int left, int right) { if(left > right) { return; } int l = left; int r = right; int baseValue = a[left]; while(l < r) { //①、从右往左查找比基数小的值 while(l < r && a[r] >= baseValue) { r--; } //②、从左往右查找比基数大的值 while(l < r && a[l] <= baseValue) { l++; } //③、如果 l < r 则交换 if(l < r) { a[l] = a[l] + a[r]; a[r] = a[l] - a[r]; a[l] = a[l] - a[r]; } } //④、将基数放到正确位置 //System.out.println("此时r = " + r); a[left] = a[r]; a[r] = baseValue; //⑤、递归 //递归左 sorted(a, left, r - 1); //递归右 sorted(a, r + 1, right); } //插入排序 public void insertSorted(int[] a) { for (int i = 1; i < a.length; i++) { if (a[i - 1] > a[i]) { int temp = a[i]; int j = i; while (j > 0 && a[j - 1] > temp) { a[j] = a[j - 1]; j--; } a[j] = temp; } } } }