快速排序,冒泡排序,选择排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | - ( void )viewDidLoad { [ super viewDidLoad]; NSMutableArray *array = [ NSMutableArray array]; //int x = arc4random() % 100;---- 表示 [0, 100) static int num = 100; for ( int i = 0;i < num; i++) { u_int32_t x = arc4random() % num; NSNumber *num = [[ NSNumber alloc] initWithInt:x]; [array addObject:num]; } [ self sort:array left:0 right:array.count - 1]; NSLog (@ "%@" ,array); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | - ( void )sort:( NSMutableArray *)arr left:( NSInteger )left right:( NSInteger )right { if (left >= right) { return ; } NSInteger i = left; NSInteger j = right; <strong> NSInteger point = [arr[left] integerValue]; // 取最左边的元素</strong> while (i != j){ while (i < j && point <= [arr[j] integerValue]) { j --; } while (i < j && point >= [arr[i] integerValue]) { i ++; } if (i < j) { [arr exchangeObjectAtIndex:i withObjectAtIndex:j]; } } [arr exchangeObjectAtIndex:i withObjectAtIndex:left]; // i++变化了 [ self sort:arr left:left right:i - 1]; [ self sort:arr left:i + 1 right:right]; } |
- 步骤
- 参数:可变数组,left0,right count-1
- i = left j = right point = arr[left]
- while (i != j)
- while(i<j && point <=arr[j])
- j—
- while(i<j && point >= arr[i])
- i++
- if i<j
- arr exchange i,j
- arr exchange i left
- self 调用这个方法 left i+1 right :right
- self 调用这个方法 left left right:i-1
- if(left >=right)return
- 参考
http://developer.51cto.com/art/201403/430986.htm
- 参考
http://www.jianshu.com/p/bfa34c56ffaa
冒泡排序和选择排序:
冒泡:
- (void)bubleSort:(NSMutableArray *)arr{ // j j 比较 for (int i = 0; i < arr.count; i ++) { for (int j = 0; j < arr.count - 1; j++) { if (arr[j] >= arr[j+1]) { [arr exchangeObjectAtIndex:j withObjectAtIndex:j+1]; } } } NSLog(@"冒泡排序-%@",arr); }
选择:
- (void)selectSort:(NSMutableArray *)arr { // i j比较 for (int i = 0 ; i < arr.count; i ++) { for (int j = i+1; j < arr.count; j++) { NSInteger temp = [arr[i] integerValue]; if (arr[i] >= arr[j]) { arr[i] = arr[j]; arr[j] = [NSNumber numberWithInteger:temp]; } } } NSLog(@"选择排序-%@",arr); }
区别在于:
冒泡排序比较 j 和 j+1
选择排序比较 i 和 j
冒泡排序内层遍历条件 for(int j = 0;j<count -1;j++) 因为比较的是j和j+1 ,小于count -1就行了
选择排序内层遍历条件for(int j = i+1; j<count; j++) 因为比较的是i和j
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?