public class Main{ public static void main(String[] args){ Main t = new Main(); // 选择排序 int[] data = new int[]{1,5,3,4,2,1,6}; t.selectSort(data); for (int i=0; i<data.length; i++){ System.out.print(data[i] + " "); } System.out.println(); // 冒泡排序 data = new int[]{1,5,3,4,2,1,6}; t.bubbleSort(data); for (int i=0; i<data.length; i++){ System.out.print(data[i] + " "); } System.out.println(); // 快速排序 data = new int[]{1,5,3,4,2,1,6}; t.qsort(data,0,data.length-1); for (int i=0; i<data.length; i++){ System.out.print(data[i] + " "); } System.out.println(); } /** * 选择排序[小 -> 大] */ public int[] selectSort(int[] data){ if (data == null || data.length < 2){ return data; } for (int i=0; i<data.length; i++){ int min = i; for (int j=i+1; j<data.length; j++){ if (data[min] > data[j]){ min = j; } } if (i != min){ int tmp = data[i]; data[i] = data[min]; data[min] = tmp; } } return data; } /** * 冒泡排序[小 -> 大] */ public int[] bubbleSort(int[] data){ if (data == null || data.length < 2){ return data; } // 最多扫描 [0,length-2]趟 int size = data.length - 2; boolean exchange = false; for (int i=0; i<=size; i++){ exchange = false; for (int j=data.length-1; j>i; j--){ if (data[j] < data[j-1]){ int tmp = data[j]; data[j] = data[j-1]; data[j-1] = tmp; exchange = true; } } if (!exchange){ break; } } return data; } /** * 快速排序 */ public int[] qsort(int[] data,int low,int high){ if (low < high){ // 分区 int center = partition(data,low,high); // 对左边排序 qsort(data,low,center-1); // 对右边排序 qsort(data,center+1,high); } return data; } /** * 分区 */ public int partition(int[] data,int low,int high){ int key = data[low]; while(low < high){ // 从右边找一个小于key的值 while(low < high && key <= data[high]){ --high; } data[low] = data[high]; // 从左边找一个大于key的值 while (low < high && data[low] <= key){ ++low; } data[high] = data[low]; } data[low] = key; return low; } }