1. 程式人生 > >JAVA簡單快速排序講解

JAVA簡單快速排序講解

首先,我們來了解一下什麼是快速排序:

所謂快速排序,就是在氣泡排序的基礎上進行改進,延伸出來的一種跳躍性的排序方法,我們都知道,氣泡排序,就是相鄰兩個數之間進行比較,然後根據情況(從小到大,從大到小)調整位置。而快速排序則不同,它是跳躍性的,採用“二分法”進行排序;

什麼是二分法呢?我們直接看一個例子:

(1)我們定義一個數組  【5,2,6,8,7,9,】。要將它從小到大進行排序;

(2)首先,我們得找一個“基準數”(什麼是基準數?基準數就是我們在陣列中選定的一個數,以它為參照點,跟其他數比大小);

(3)我們就以第一個數 5 作為 “基準數”,那麼,我們第一步要做的,就是把比5小的,放到5的左邊,比5大的,放到5的右邊;

(4)然後得到【2,5,6,8,7,9】

(5)現在,左邊的都比5小,右邊的都比5大,這樣,我們就以5為中心點,將比5小的和比5大的,分開了。也就是說,5已經回到了它的位置。

(5)左邊的我們已經不用進行排序了(已經只有一個)

(6)以此類推,我們將5右邊的進行排序;

簡單的快速排序就是這樣,程式碼如下:


import java.util.Arrays;

public class Unit1_1<T> {
    public static void main(String[] args) {
        Integer[] nums = {10,58,72,5,9,7,45,15};//需要排序的陣列
        nums = sort(nums,0,nums.length-1);
        System.out.println(Arrays.toString(nums));
    }
    
    public static Integer[] sort(Integer[] nums,Integer left,Integer right){
        int i,j,t,temp;
        if(left>right){
            return nums;
        }else{
            //獲取基準數
            temp = nums[left];
             i = left;
             j = right;
            //從右邊往左遍歷,獲取第一個小於基準數的下標
            while(nums[j]>=temp && i<j){
                j--;
            }
            
            //從左往右遍歷,獲取第一個大於基準數的下標
            while(nums[i]<=temp && i<j){
                i++;
            }
            //然後交換兩個數在陣列中的位置
            if(i<j){//判斷兩數下標有沒有相遇
                //若沒有相遇
                //交換兩數的位置
                t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
                return sort(nums,left,right);
            }else{
                nums[left] = nums[i];
                nums[i] = temp;
                sort(nums, left, i-1);
                sort(nums, j+1, right);
                return nums;
            }
        }
    }
}

相關推薦

JAVA簡單快速排序講解

首先,我們來了解一下什麼是快速排序: 所謂快速排序,就是在氣泡排序的基礎上進行改進,延伸出來的一種跳躍性的排序方法,我們都知道,氣泡排序,就是相鄰兩個數之間進行比較,然後根據情況(從小到大,從大到小)

使用java實現快速排序的一個簡單例子

fast val rgs 快速 實現 個數 static void sta public static void main(String[] args) { // 測試排序 Random r = new Random(); int arr[] = new

使用java實現快速排序(我認為是最簡單最容易理解的版本)

一切都在程式碼和註釋之中。複製貼上就能跑,邊跑邊看才是最愉快的。 所以,話不多說,放碼過來。   public class QuickSort { public static void main(String[] args) { int x[]={6,1,2,7,9,1

一種簡單的用java實現快速排序(Quicksort)

1,快速排序(Quicksort)是對氣泡排序的一種改進。對資料量越大,資料分佈越混亂的,一般認為是效能最好的。快排是分治思想的一種體現,把大的問題細化成小問題,把小問題細化成更小的問題,最終把問題縮小到一定規模內,可解決。 2,快排演算法思路就是,先取一個數作為關鍵資料(key一般

Java實現快速排序

static nlogn -- 可能 超過 highlight uic 數組 images 一、快速排序的思想   基於分治的思想,是冒泡排序的改進型。首先在數組中選擇一個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從數組的兩端掃描數組,設兩

Java快速排序的非遞歸實現

scrip swa java版 sys ext 遞歸實現 ref src 分享   快速排序一般采用遞歸方法(詳見快速排序及其優化),但遞歸方法一般都可以用循環代替。本文實現了java版的非遞歸快速排序。 更多:數據結構與算法合集 思路分析   采用非遞歸的方法,首

java實現快速排序一種常規的,一種是左程雲的方式。

java實現快速排序: 一:先來一個常規快排: 這個方式就是我們的基準值一直在兩個邊界徘徊,要麼在less的較大邊界,要麼是在more的小邊界,其實就是在居中位置徘徊。 package chapter1; //來一個快排,常規快排 public class QuickSort {

Java演算法-快速排序

通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的資料均比關鍵字小,而另一部分記錄的資料均比關鍵字大,則分別對這兩部分繼續進行排序,直到整個序列有序。 把整個序列看做一個數組,把第零個位置看做中軸,和最後一個比,如果比它小交換,比它大不做任何處理;交換了以後再和小的那端

Java 實現快速排序法對陣列進行排序

 快速排序是對氣泡排序的一種改進,其排序速度相對較快。 基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料要小,然後再按照這個方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列的目的。最壞情況的

java 實現快速排序

  快速排序是對氣泡排序的一種改進,它的基本思想是:通過一趟排序將要排序的部分分割成獨立的兩部分,其中一部分的資料比另一部分的資料都要小,然後對這兩部分資料在快速排序,整個排序過程可以遞迴進行,以此達到

Java實現快速排序、歸併排序、堆排序和希爾排序

快速排序 演算法思想 1.將陣列的第一個元素取為target,定義兩個指標i 和 j; 2.指標i ,從左向右找到第一個比target大的元素,指標j從右向左找到第一個比target小的元素,

Java實現快速排序(分治法)

<span style="font-size:18px;">package com.alibaba; public class QuickSortTest { public stati

java中氣泡排序講解

原理:比較兩個相鄰的元素,將值大的元素交換至右端。 思路:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後

分治法在排序演算法中的應用(JAVA)--快速排序(Lomuto劃分、Hoare劃分、隨機化快排)

分治法在排序演算法中的應用 快速排序:時間複雜度O(nlogn) 如果說歸併排序是按照元素在陣列中的位置劃分的話,那麼快速排序就是按照元素的值進行劃分。劃分方法由兩種,本節將主要介紹Huare劃分,在減治法在查詢演算法中的應用(JAVA)--快速查詢這篇文章中講述了Lomu

演算法 -- Java實現快速排序(圖解 + 程式碼實現)

排序思想: 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資

Java快速排序----在程序執行緒模擬實驗中遇到的排序問題

前言:最近作業系統課需要完成PCB程序執行緒模擬實驗,老師給的c語言版實現程式碼,想著用java實現一波,然後在其中遇到了排序問題,我採用快速排序的演算法進行優先度排序。本人程式設計菜鳥一隻,不喜勿噴,另外,程式碼中有大量註釋,請做好心理準備... 快速排序原理:基於分治

JAVA語法——快速排序

print spa nbsp pri span 4.3 ati util quic package 快速排序; import java.util.Arrays; public class 快速排序 { public static void main(Stri

java簡單字串排序

Bill,54 Black,46 Bush,78 Frank,88 Jean,65 Jenny,77 Mark,96 Smith,98 White,85 Wood,83 import java.util.Scanner; class Person {  String name;  int score; }

java快速排序的優化

接上節講的快速排序,我們來了解一下幾種它的優化。1.隨機取基準    上節我們採取的是以開頭為基準,然後進行一次快速排序,但是如果原陣列相對有序的話,那麼就會出現每次找基準,原陣列順序不變,時間複雜度相當的高,為了處理這種情況我們採用隨機選取基準,就是 public stat

JAVA快速排序演算法的實現

使用快速排序演算法對a[0,n-1]進行排序,從a[0,n-1]中選擇一個元素作為middle,該元素為中點(支點),把剩下的元素分為兩段——left和right;使得left中的元素都小於或等於中點,right中的元素都大於或等於中點。遞迴的使用快速排序演算法