/** * 冒泡排序,從小到大 * @param args */ public static void main(String args[]){ int nums[] = new int[] { 12, 35, 99, 18, 76,2,4,5,6,77,8,9 }; for(int i=0;i<nums.length-1;i++){ //int j=0;j<nums.length-1;j++ //int j=0;j<nums.length-1-i;j++ //第二種,優與第一種 for(int j=0;j<nums.length-1-i;j++){ int f=nums[j];//第一個數 int s=nums[j+1];//第二個數 if(s<f){ int temp=f; nums[j]=nums[j+1]; nums[j+1]=temp; } } } output(nums); } public static void output(int num[]){ for(int n:num){ System.out.print(n +" "); } }
/** * 查找出中軸(默認是最低位low)的在numbers數組排序後所在位置 * * @param numbers * 帶查找數組 * @param low * 開始位置 * @param high * 結束位置 * @return 中軸所在位置 */ public static int getMiddle(int[] numbers, int low, int high) { int temp = numbers[low]; // 數組的第一個做爲中軸 while (low < high) { while (low < high && numbers[high] > temp) { high--; } numbers[low] = numbers[high];// 比中軸小的記錄移到低端 while (low < high && numbers[low] < temp) { low++; } numbers[high] = numbers[low]; // 比中軸大的記錄移到高端 } numbers[low] = temp; // 中軸記錄到尾 return low; // 返回中軸的位置 } /** * * @param numbers * 帶排序數組 * @param low * 開始位置 * @param high * 結束位置 */ public static void quickSort(int[] numbers, int low, int high) { if (low < high){ int middle = getMiddle(numbers, low, high); // 將numbers數組進行一分爲二 quickSort(numbers, low, middle - 1); // 對低字段表進行遞歸排序 quickSort(numbers, middle + 1, high); // 對高字段表進行遞歸排序 } } /** * 快速排序 * * @param numbers * 帶排序數組 */ public static void quick(int[] numbers) { // 查看數組是否爲空 if (numbers.length > 0) { quickSort(numbers, 0, numbers.length - 1); } } /** * 打印 * @param numbers */ public static void printArr(int[] numbers) { for (int i = 0; i < numbers.length; i++) { System.out.print(numbers[i] + ","); } System.out.println(""); } public static void main(String[] args) { int[] numbers = { 10, 20, 15, 0, 6, 7, 2, 1, -5, 55 }; System.out.print("排序前:"); printArr(numbers); quick(numbers); System.out.print("快速排序後:"); printArr(numbers); }
參考文章:html