1. 程式人生 > >ios使用object-c實現快速排序演算法

ios使用object-c實現快速排序演算法

在iOS開發中我們有許多時候用到排序演算法,而快速排序是比較常用的演算法

程式碼才用遞迴的方法,內容如下:

-(void)quickSort:(NSMutableArray *)array withLeftIndex:(NSInteger)leftIndex AndRightIndex:(NSInteger)rightIndex{

    if(leftIndex>=rightIndex){

        return;

    }

    NSInteger i=leftIndex;

    NSInteger j=rightIndex;

NSInteger key=[[array objectAtIndex:i]

integerValue];

    while (i<j) {

        while (i<j&&[[array objectAtIndex:j] integerValue]>key) {

            j--;

        }

        array[i]=array[j];

        while (i<j&&[[array objectAtIndex:i] integerValue]<key) {

            i++;

        }

        array[j]=array[i];

    }

    array[i]=@(

key);

    [selfquickSort:array withLeftIndex:leftIndex AndRightIndex:i-1];

    [selfquickSort:array withLeftIndex:i+1AndRightIndex:rightIndex];

}


相關推薦

ios使用object-c實現快速排序演算法

在iOS開發中我們有許多時候用到排序演算法,而快速排序是比較常用的演算法程式碼才用遞迴的方法,內容如下:-(void)quickSort:(NSMutableArray *)array withLeftIndex:(NSInteger)leftIndex AndRightIn

[排序演算法]C++實現快速排序

基本思想   快速排序(Quick Sort)是對氣泡排序的一種改進。   它的基本思想是,通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩

Python實現快速排序演算法

快速排序也是使用了分治思想的排序方法,但與歸併排序不一樣的是“分”的時候的依據。歸併排序“分”的依據是對半分,不管大小,而快速排序則是選定陣列中的一個值,以這個值為依據,將陣列分為三個部分:小於這個值的部分,大於等於這個值的部分,這個值。這樣就以選定的點將陣列分

C++實現歸併排序演算法

1.歸併排序 實現方法:      把長度為 n 的數列,每次簡化為兩個長度為 n/2 的數列,直至數列中剩一個元素後兩兩合併,直至所有都參與操作。     合併方法:比較兩個數列第一個元素,將最小的放在另一個數中C中,重複直至某數列為空,然

c#實現選擇排序演算法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 選擇排序

C++實現各種排序演算法

//各種排序演算法 #include"stack.h" //插入排序(直接插入排序和希爾排序) //直接插入排序 //正確的swap函式應該像下面那樣寫,否則無法實現交換 //對於陣列使用這個函式,swap(a[low], a[high]) void swap(int *a

java實現快速排序演算法

package cn.com.wanghy; /** * 快速排序:是對起泡排序的一種改進,它的基本思想是:通過一趟排序將待排序記錄分割成獨立的兩部分, * 其彙總一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分繼續進行排序,已達到 * 整個序列有序

使用C++實現快速排序QuickSort

參考了weiss的《資料結構與演算法分析》的C++描述第三版。 快速排序原理其實很簡單,是一個遞迴的過程。首先確定一個樞紐元,然後把大於樞紐元的元素放在左邊,把小於樞紐元的元素放在右邊。然後再對左右兩邊的子序列不斷的重複這個操作(確定樞紐元,然後把大小元素歸類),直到子序列

排序演算法-Java實現快速排序演算法

​​   開篇介紹 大家好,公眾號【Java極客思維】近期會整理一些Java高頻面試題分享給小夥伴,也希望看到的小夥伴在找工作過程中能夠用得到!本章節主要針對Java快速排序演算法的實現進行分享。   首先,來看一下,快速排序的實現的動態圖: ​   快速排序介紹: 快速排序,根

(排序演算法)linux c語言實現快速排序(氣泡排序的改進版)

 快速排序演算法是對氣泡排序演算法的一種改進,氣泡排序是對單個元素的升降,快速排序是對所有元素的升降,不過這個升降是取了某一個標準的前提下,在本文程式碼中,就以a[i],其實就是以最左邊的元素為參考,比較交換之後,將這個參考元素放到分界的地方,即i的位置。 程式碼如下,裡面有比較詳細的

快速排序演算法實現 C# 版本

採用遞迴思想 實現了 快速排序演算法 如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespa

快速排序演算法C語言實現

        大一想進社團,院科協技術部,面試要自己用c寫個快排。以前從來沒有接觸過,對c的瞭解也僅限於高中和暑假出於興趣看的一點點資料,只能從基礎開始學。找了很多程式碼,有些本身自己就是錯的,還有些非常繞,根本看不懂。最後東拼西湊,總算是弄出來了個原型,再慢慢修改,終於弄

快速排序演算法C++實現[評註版]

經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看<演算法導論>這本書,而在他們釋出的程式碼通常是差不多的版本,估計也是網上copy一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一臺不能上網的筆記本,20分鐘,你是根本寫不

(排序演算法)linux c語言實現快速排序

/*************************************************** ##filename : arrinsert.c ##author : GYZ ##

快速排序演算法(QSort,快排)及C語言實現

上節介紹瞭如何使用起泡排序的思想對無序表中的記錄按照一定的規則進行排序,本節再介紹一種排序演算法——快速排序演算法(Quick Sort)。 C語言中自帶函式庫中就有快速排序——qsort函式 ,包含在 <stdlib.h> 標頭檔案中。 快速排序演算法是在起泡排序的基礎上進行改進的一種演算

快速排序演算法c語言演算法實現)-------精簡原理分析

    “快速排序法”使用的是遞迴原理,下面我結合一個例子來說明“快速排序法”的原理。首先給出一個數組{53,12,98,63,18,72,80,46, 32,21},先找到第一個數--53,把它作為中間值,也就是說,要把53放在一個位置,使得它左邊的值比它小,右邊的值比它大。{21,12,32, 46,18

快速排序演算法 C語言實現

快速排序演算法(QuickSort) 1.演算法思想 快速排序是一種劃分交換排序,採用了分治策略,通常稱為分治法。 (1)分治法的基本思想 將原問題分解成若干個規模更小但結構與原問題相似的子問題;遞迴地解這些子問題,然後將這些子問題的解組合成原問題的解。 (2)快速排序的基

快速排序演算法實現C++)

快速排序採用的是分治法,其平均時間複雜度為O(nlogn) 一趟快速排序的演算法是[1]:   1)設定兩個變數I、J,排序開始的時候:I=0,J=N-1;   2)以第一個陣列元素作為關鍵資料,賦值給key,即 key=A[0];   3)從J開始向前搜尋,即由後開

C語言實現快速排序法(分治法)

下一個 enter hang partition 等於 就是 tor log markdown title: 快速排序法(quick sort) tags: 分治法(divide and conquer method) grammar_cjkRuby: true ---

Java快速排序演算法實現

高快省的排序演算法 有沒有既不浪費空間又可以快一點的排序演算法呢?那就是“快速排序”啦!光聽這個名字是不是就覺得很高階呢。 假設我們現在對“6  1  2  7  9  3  4  5 10  8”這