iOS 快速排序


核心代碼

///=================快速排序

- (void)sort {

? ? self.array = [NSMutableArray array];

? ? for(inti =0; i <30; i++) {

? ? ? ? intsum =arc4random()%20000000;

? ? ? ? [self.array addObject:@(sum)];

? ? }

? ? NSLog(@"排序前 === %@",self.array);

? ? [self?sort:0 end:(int)self.array.count];

? ? NSLog(@"排序后 === %@",self.array);

}

- (void)sort:(int)begin end:(int)end {

? ? if(end - begin <2) {

? ? ? ? return;

? ? }

? ? //確定軸點元素

? ? int?mid = [self?pivotIndex:begin end:end];

? ? //對子序列做快速排序

? ? [self?sort:begin end:mid];

? ? [self?sort:mid+1 end:end];

}

/// 確定軸點元素

/// @param begin 開始

/// @param end 結束

- (int)pivotIndex:(int)begin end:(int)end ?{?

? ? //備份begin位置的元素

? ? id?pivot =?self.array[begin];

? ? //end 指向最后一個元素

? ? end--;

? ? while(begin < end) {

? ? ? ? while(begin < end) {

? ? ? ? ? ? if([self?cmp:pivot end:self.array[end]] <0) {//右邊元素 > 軸點元素

? ? ? ? ? ? ? ? end--;

? ? ? ? ? ? }else{//右邊元素 <= 軸點元素

? ? ? ? ? ? ? ? self.array[begin++] =?self.array[end];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? while(begin < end) {

? ? ? ? ? ? if([self?cmp:pivot end:self.array[begin]] >0) {//左邊元素 < 軸點元素

? ? ? ? ? ? ? ? begin++;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? self.array[end--] =?self.array[begin];

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? //將軸點元素放入最終的位置

? ? self.array[begin] = pivot;

? ? //返回軸點元素的位置

? ? return?begin;

}

- (int)cmp:(id)first end:(id)second {

? ? int?one = [first intValue];

? ? int?two = [second intValue];

? ? if(one > two) {

? ? ? ? return?1;

? ? }

? ? if(one < two) {

? ? ? ? return?-1;

? ? }

? ? return?0;

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • - (void)viewDidLoad { [super viewDidLoad]; //初始化 創(chuàng)建數(shù)組...
    iOS大熊貓閱讀 166評論 0 0
  • 快速排序 [toc] 快速排序1960年由查爾斯安東尼理查德霍爾(Charles Antony Richard H...
    錦鯉躍龍閱讀 704評論 0 0
  • 一、partition quicksort 分治+遞歸 快速排序一次劃分算法偽代碼: 將i和j分別指向待排序列最左...
    敲可愛的小超銀閱讀 503評論 0 0
  • ??快速排序(Quick Sort)是實際開發(fā)中經常選用的一種排序方式。其排序原理:取數(shù)組中的首個元素為軸點數(shù)據(jù),...
    雪中夜歸人閱讀 824評論 0 1
  • 快速排序(Quick Sort) 看到名字,就知道這種排序算法速度非常快。那到底有多快呢?在前面冒泡排序時,就有提...
    ducktobey閱讀 501評論 0 2