快速排序的理解

2021-07-08 09:55:37 字數 1942 閱讀 7106

快速排序是對氣泡排序的一種改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。通過一趟掃瞄,確保以某個數為基準點的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。

簡單的說就是

找乙個基準數(待排序的任意數,一般都是選定首元素),把比小於等於基準數的元素放到基準數的左邊,把大於基準數的元素放在基準數的右邊.排完之後,在把基準數的左邊和右邊各看成乙個整體, 左邊:繼續選擇基準數把小於等於基準數的元素放到基準數的左邊,把大於基準數的元素放在基準數的右邊,右邊也是一樣..直到各區間只有乙個數字置.

借用別人的這張,覺得把快排表達的很明顯

定義乙個陣列

nsmutablearray *numberarray = [nsmutablearray arraywithobjects:

[nsnumber numberwithint:7],

[nsnumber numberwithint:12],

[nsnumber numberwithint:3],

[nsnumber numberwithint:45],

[nsnumber numberwithint:20], nil];

宣告乙個方法 傳入排序陣列、開始索引、結束索引

-(void)quicksort:(nsmutablearray *)array startindex:(nsinteger)startindex endindex:(nsinteger)endindex 

}[array exchangeobjectatindex:tempindex withobjectatindex:startindex];

[self quicksort:array startindex:startindex endindex:tempindex-1]; //繼續處理左邊的,這裡是乙個遞迴的過程

[self quicksort:array startindex:tempindex+1 endindex:endindex]; //繼續處理右邊的,這裡是乙個遞迴的過程

nslog(@"array %@",array);

}

ios也為我們提供方法讓我們實現對陣列的快排

方法1: nscomparator

nsarray *sortedarray = [numberarray sortedarrayusingcomparator:^nscomparisonresult(id  _nonnull obj1, id  _nonnull obj2)  else 

}];nslog(@"%@",sortedarray);

方法2: nssortdescriptor

nssortdescriptor *descriptor = [[nssortdescriptor alloc] initwithkey:nil ascending:yes];//ascending控制公升序還是降序

nsarray *sortarray = [nsarray arraywithobjects:descriptor, nil];

nsarray *sortedarray = [numberarray sortedarrayusingdescriptors:sortarray];

nslog(@"%@",sortedarray);

也可以把這個方法封裝成函式

-(void)changearray:(nsmutablearray *)dicarray orderwithkey:(nsstring *)key

ascending:(bool)yesorno

快速排序的理解

純數字與物件排序,注意物件排序邊界問題 理解 將陣列中的元素大於某個值的放在右邊,小於某個值的放再左邊。然後遞迴,直到low high在返回。在快速排序中,首先要將第乙個元素作為key值 其他從某位起就某位做key值也可 前面設定left為第乙個元素的索引,right為最後乙個元素的索引。一直hig...

快速排序理解

include include stdafx.h define n 7 void print2 int a printf n void sort int data,int left,int right int i left int j right int key data i while i j 左...

快速排序理解

每次處理好 某個 標桿 數字 在 最終 陣列 中的位置。然後 每個 數字 依次 作為標桿數,都找到 自己的 位置。相比 氣泡排序,冒泡 是每次找 最大數字的 位置,找好後 在 不包含最大 數字的 陣列中,再 次找 當前最大數的 位置。而快速 排序 是 找 指定 標桿數 的位置。標桿數 可以是任意乙個...