Java實現排序演算法之快速排序
阿新 • • 發佈:2019-01-26
一、綜述
快速排序是交換排序中的一種,平均演算法複雜度是O(nlogn),最壞O(n*n)。下面用Java實現一個快速排序,並用註釋的方式解釋了思想和原理。
二、Java實現堆排序
三、結果檢驗package com; /** * @author 王勤為 * * 這個是實現快速排序的類 * * 快速排序的基本思想是分治法: * * 1.先從數列中取出一個數作為基準數。 * * 2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。 * * 3.再對左右區間重複第二步,直到各區間只有一個數。 * * */ public class AQuickSort { public static void quickSort(int[] a, int left, int right) { if (left == right | left > right) { // 終止條件 return; } int i = left, j = right; // 定義兩個指標,一個從左往右遍歷,一個從右往左遍歷 int x = a[left]; // 定義基準數,預設 是陣列第一個 while (i < j) { while (a[j] >= x & i < j) { // 如果j指向的數比基數大,繼續往左移動指標 j--; } while (a[i] <= x & i < j) { // 如果i指向的數比基數小,繼續往右移動指標 i++; } swap(a, i, j); } // 以上程式碼過後 i==j 此時,把基數和i指向的數交換位置 swap(a, left, i); // 遞迴處理基數左邊的數列和右邊的數列 quickSort(a, left, i - 1); quickSort(a, i + 1, right); } // 交換元素的方法 public static void swap(int[] a, int left, int right) { if (a == null | left == right | a.length < 2) return; int temp = a[left]; a[left] = a[right]; a[right] = temp; } }
public class maintest { public static void main(String[] args) { int[] a = { 45, 6, 43, 78, 12, 90, 23, 21, 41, 64, 31, 91, 81, 6,45,89,43,12,13,33,99,456,789 }; AQuickSort.quickSort(a, 0, a.length-1); for (int e : a) { System.out.print(e + " "); } } } //呼叫輸出結果為:6 6 12 12 13 21 23 31 33 41 43 43 45 45 64 78 81 89 90 91 99 456 789