java基礎演算法之快速排序

來源:互聯網
上載者:User

標籤:冒泡排序   public   獨立   rgs   排序   tin   sys   演算法思想   int   

  快速排序(Quicksort)是對冒泡排序的一種改進。在大學學過之後現在基本忘了,最近在好多地方都看到說快速排序在面試會問到,於是自己也準備重新拾起以前忘記的東西來,慢慢的積累自己的基礎知識。fighting

演算法概念

  快速排序由C. A. R. Hoare在1962(50多年了呢)年提出,它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列(摘自百度百科)。

  快速排序採用了一種分治的策略,所以有時候我們也稱為分治演算法。

演算法思想

  1.先從數列中取出一個數作為基準數,一般會取第一個數做為基準數。

  2.然後對數列進行分區,首先將比這個基準數大的數全放到它的右邊,小於或等於基準數的數全放到它的左邊(一刀切,左邊小於基準數,右邊大於基準數)。

  3.再對劃分的左右區間重複第二步,直到各區間只剩一個數就完成了排序。

  下面畫一個詳細的大圖,只畫了第一趟排序的過程,知道第一躺怎麼排序,後面都是一樣的。

演算法代碼

package com.roc.Quicksort;/** * 快速排序 *  * @author liaowp *  */public class Quicksort {    static void sort(int value[], int left, int right) {        if (left < right) {// 判斷左邊的下標是小於右            int i = left, j = right;// i為小值,j為大值            int temp = value[left];// 預設中間數為temp,即最左邊的數            while (i < j) {// 如果i<j                while (i < j && value[j] >= temp) {// 從右往左比較,如果i<j且value[j]>=temp                    j--;                }                if (i < j) {// 如果i<j,找到有比中間數大的                    value[i] = value[j];// 左邊的數放右邊的數                    i++;// 左移一位                }                while (i < j && value[i] < temp) {// 從左往右找                    i++;                }                if (i < j) {// 找到有比中間數小的,替換到右邊                    value[j] = value[i];                    j--;                }            }            value[i] = temp;            for (int n = 0; n < value.length; n++) {                System.out.print(value[n] + " ");            }            System.out.println();            sort(value, left, i - 1);// 左邊的重複            sort(value, i + 1, right);// 右邊的重複        }    }    public static void main(String[] args) {        int value[] = { 5, 1, 8, 4, 15 };        System.out.print("未經處理資料:");        for (int i = 0; i < value.length; i++) {            System.out.print(value[i] + " ");        }        System.out.println();        sort(value, 0, 4);        System.out.print("排序結果:");        for (int i = 0; i < value.length; i++) {            System.out.print(value[i] + " ");        }    }}

代碼結果如下:

未經處理資料:5 1 8 4 15 4 1 5 8 15 1 4 5 8 15 1 4 5 8 15 排序結果:1 4 5 8 15 

注意:第一遍快速排序不會直接得到最終結果,只會把比基準數大和比基準數小的數分到基準數的兩邊。為了得到最後結果,需要再次對基準數兩邊的數組分別執行此步驟,然後再分解數組,直到數組不能再分解為止(只有一個資料),才能得到正確結果。

java基礎演算法之快速排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.