1. 程式人生 > >超小白教程之快速排序

超小白教程之快速排序

    快速排序的思想是"分而治之",你可以把它想象成打完一邊的怪,打另一邊的怪。

核心思路就是1.找到"一個人的身高",比他高的站後面,比他矮的站前面。

2.在矮的那堆人中再找出一個人的身高,比他高的站後面,矮的站前面,以此類推。

3.高個子那邊也是如此。

接下來看保姆程式碼:

public class Parti {
	public void quick(int[] arr, int first, int end) {
		int x = first;//first和end都是陣列下標,end不要弄成陣列長度喲
		int y = end;
		int k = arr[first];//這就是那個"一個人的身高",相當於參照物.
		while (x < y) {
			while (x < y && arr[y] >= k) {//有人問,上面判斷x<y了,為啥這裡還要判斷,因為y--啊....
				y--;//不滿足arr[y]>=k就退出,意思就是y遞減,直到找到第一個比K小的數退出.
			}
			if (x < y) {
				int temp = arr[x];
				arr[x] = arr[y];
				arr[y] = temp;
				x++;//其實這個x++,不要也可以,但為了體恤虛擬機器,讓他少走幾步路吧.
			}
			while (x < y && arr[x] <= k) {
				x++;
			}
			if (x < y) {
				int temp = arr[x];
				arr[x] = arr[y];
				arr[y] = temp;
				y--;
			}
		}
		System.out.println("k="+k+" "+"x="+x+" "+"y="+y);
		//這個你可以用來看"一個人的身高",和x,y大小,可以判斷接下來是執行哪步.
		if (x > first) {//這2個遞迴呼叫,就是在高個子和矮個子中再排序.
			quick(arr, first, x - 1);
		}
		if (y < end) {
			quick(arr, x + 1, end);
		}
	}
	public static void main(String[] args) {
		Parti p = new Parti();
		int[] list = { 50, 20, 10, 88, 70, 57, 9, 58 };
		p.quick(list, 0, 7);
		for (int i : list) {
			System.out.print(i + " ");
		}
	}
}

這裡了,你要是還看不懂!沒關係,還有圖。

我們看看上面程式碼的執行結果


接著看第一次排序的過程圖


第二次,第三次,第N次。。。我不想弄了,暈了~~~~~~~~

相關推薦

教程快速排序

    快速排序的思想是"分而治之",你可以把它想象成打完一邊的怪,打另一邊的怪。 核心思路就是1.找到"一個人的身高",比他高的站後面,比他矮的站前面。 2.在矮的那堆人中再找出一個人的身高,比他高

【Kibana6.3.0】Kibana6入門教程下載安裝與資料準備

1. Kibana簡介及下載安裝 Kibana是專門用來為ElasticSearch設計開發的,可以提供資料查詢,資料視覺化等功能。 下載地址為:https://www.elastic.co/downloads/kibana#ga-release,請選擇適合當前es版本的K

入門歸併排序(Merge Sort)

//首先考慮下如何將將二個有序數列合併。這個非常簡單,只要從比較二個數列的第一個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另一個數列的資料依次取出即可。   //可以將A,B組各自再分成二組。依次類推,當分出來的小組只有一個數據時

【U3D入門教程——代碼篇】三:常見腳本函數

force avi log tar 啟動 for gravity vector 教程 個人學習第三章節:常見腳本 1.Awake( )與Start() Awake( )在遊戲創建時調用,用於設置遊戲初始化的參數 Start( )在腳本被調用,執行在所有Update( )之

略陽縣不動產登記微信預約教程

為了更好、更精準、更方便的為企業和群眾辦理不動產登記,略陽縣不動產登記交易服務中心特此推出微信預約功能。這樣,您不管在哪,只要拿出手機,關注我們的微信公眾號“略陽不動產登記”,根據您的時間提前預約相應的登記業務,再按預約時間到略陽不動產登記大廳,就可以直接辦理啦

入門NAS—快速搭建私有云教程系列(一)

#### 什麼是NAS 在日常的工作生活中,我們有大量的資料、檔案需要儲存在電腦或者其他終端裝置中,但是這種方式需要電腦配備高容量的硬碟,而且需要隨時隨地的帶著,這樣是不是很麻煩? 那麼,今天,我來介紹一種家庭私有云—NAS,通過NAS,我們可以隨時隨地的通過網頁端的方式去訪問我們已經儲存在NAS裡面的檔

linux歷險記奶爸奮起

linux學習故事故事背景介紹:本人姓吳,名虹林,1個老婆的老公(開個玩笑),2個小孩的爸。86年的一天成功的從玄幻大陸穿越來到重慶。10年大學畢業(網絡工程專業),年輕比較狂放棄了從業的機會選擇考研,結果很悲劇也很尷尬於是就跟父親去工地搬磚,11年認識一女孩(現在孩子他媽),13年5月在上車四個月後並在各種

排序快速排序

技術分享 復雜 partition 規則 作用 快速排序 iterator 排序規則 cto 快速排序的在內排中起到比較重要的作用,平均時間復雜度達到O(nlogn)。 升序快速排序 1 int partition(vector<int> &vi,

cocos遊戲開發教程網站

s2d tar lists blank org 3.3 ria get sts 《Quick-Cocos2d-x v3.3小白書系列教程》 《Quick-Cocos2d-x初學者遊戲教程》cocos遊戲開發小白教程網站

6.比較排序快速排序

python 大於 -s 數組元素 span pac .com quicksort image   快速排序(簡稱快排)因為其效率較高(平均O(nlogn))經常在筆試題中對其考查。   對於快排的第一步是選取一個“基數”,將會用這個“

入門快速排序

問題 name spa names cnblogs turn 算法導論 div blog 1 /* 2 入門之快速排序 3 時間復雜度:O(nlogn) 4 最壞情況時時間復雜度能達到O(n^2) 5 借鑒自算法導論 6 */ 7 #include<i

Python學習路—變量、字符編碼、字符拼接

sdi 電路 input elif action aps 類型 lam job 變量命名規則: (1)變量名只能是字母,數字,下劃線的任意組合。  ex:_amber_666NAme (2)關鍵字不能聲明為變量名  ex:[‘and‘, ‘as‘, ‘assert‘, ‘

Python學習路—while、for循環、運算

範圍 src 格式 次循環 pen 映射 年齡 退出 finish Python裏面的循環跟其他語言裏的循環基本一致,只是書寫格式不同。 1.for循環: for [循環條件]:[循環語句]  滿足循環條件,則執行循環語句,執行一次判斷一次,不滿足則結束循環。 簡單的循環:

學習Code First(三)

數據庫 change chang chan inf 模型 code test nbsp 上下文Context類中的base構造器的幾個方法重置(1、無參 2、database name 3 、 連接字符串) 無參:如果基類base方法中無參,code first將會以 :{

學習Code First(二)

文件中 build 默認 dbm pcre student 技術分享 使用 類名 Code First約定: 註:EDMX模板 (SSDL:存儲模型=>數據庫表 ,CSDL:概念模型=>實體,C-S模型=>存儲和概念模型之間的映射關系) System.Da

八大排序快速排序算法-python實現

com 現在 主函數 port 右移 們的 冒泡 實現 odin 快排就是折中時間和空間的一個算法,可以說是較為高效的算法,平時用用他沒啥大問題。 自己也看到個比較形象生動的例子,為了讓大家能夠看的比較清楚,我就直接轉過來給大家看了哈!但是我使用python實現的: 註意以

排序算法入門快速排序(java實現)

大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換   快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序

內部排序快速排序

ref i+1 tar ret 遞歸調用 互換 int nbsp oid 設要排序的數組是A[0]……A[N-1],首先任意選取一個數據(通常選用數組的第一個數)作為關鍵數據,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得註意的

成長路:初識python(三) -----------python內置函數

urn locals for lte mod pre 最大 變量 ascii   剛才看了一下竟然還有人看我的博客^ - ^ 廢話不多說,上代碼,有不對的勿噴,畢竟我真的是小白 # python 內置函數整理# 返回一個數的絕對值# a = abs(-10)# print(

成長路:初識python(五) --python裝飾器

pytho ret 成了 通過 是把 代碼 rgs 得到 ## flag = "=======================裝飾器============================="#定義的裝飾器函數# def outer(func):# def inne