核心代碼
///=================快速排序
- (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;
? ? }
? ? //確定軸點(diǎn)元素
? ? int?mid = [self?pivotIndex:begin end:end];
? ? //對子序列做快速排序
? ? [self?sort:begin end:mid];
? ? [self?sort:mid+1 end:end];
}
/// 確定軸點(diǎn)元素
/// @param begin 開始
/// @param end 結(jié)束
- (int)pivotIndex:(int)begin end:(int)end ?{?
? ? //備份begin位置的元素
? ? id?pivot =?self.array[begin];
? ? //end 指向最后一個(gè)元素
? ? end--;
? ? while(begin < end) {
? ? ? ? while(begin < end) {
? ? ? ? ? ? if([self?cmp:pivot end:self.array[end]] <0) {//右邊元素 > 軸點(diǎn)元素
? ? ? ? ? ? ? ? end--;
? ? ? ? ? ? }else{//右邊元素 <= 軸點(diǎn)元素
? ? ? ? ? ? ? ? self.array[begin++] =?self.array[end];
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? while(begin < end) {
? ? ? ? ? ? if([self?cmp:pivot end:self.array[begin]] >0) {//左邊元素 < 軸點(diǎn)元素
? ? ? ? ? ? ? ? begin++;
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? self.array[end--] =?self.array[begin];
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? //將軸點(diǎn)元素放入最終的位置
? ? self.array[begin] = pivot;
? ? //返回軸點(diǎn)元素的位置
? ? 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;
}