OC下的冒泡排序,直接插入排序,折半插入排序
来源:互联网 发布:阿里云网站备案 编辑:程序博客网 时间:2024/05/22 14:33
//直接排序算法,取出当前第n位的数(待排序的数),和大于第n位的数逐一比较,如果第n+k这位数大于待排序的数,那么两个对换一下位置第n+k位的值和第n位数的值,直接给个例子更好理解
// arr=@"53,76,34,56,49"
//(1)arr[0]和arr[1]比较,arr[0]小于arr[1] 位置不变,接着和下一位arr[2]比较,arr[0]大于arr[2],这时候arr[0]和arr[2]的值互换,注意是值互换,这时候变成了34、76、53、56、49,然后继续还是arr[0]和arr[3]和arr[4]比较,第一次循环完得到的排序是34、76、53、56、49,以此类推,第一次循环完找出最小的一个数,放在arr[0]这个位置,第二次循环找出第二小的数值放在arr[1]的位置。
NSMutableArray *arrMutable=[NSMutableArray arrayWithObjects:@"53",@"76",@"34",@"56",@"49", nil];
for (int i=0; i<arrMutable.count; i++) {
for (int j=i+1;j<arrMutable.count; j++) {
int number=[arrMutable[i] intValue];
int twoNumber=[arrMutable[j] intValue];
if(number>twoNumber){//如果后面数大于待排序的数时,两者替换位置
[arrMutable exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
NSLog(@"%@",arrMutable);
}
for (int j=0;j<i; j++) {//i表示已经排序好的个数,
int yNumber=[arrMutable[i-j-1] intValue];//前面一位数
int dnumber=[arrMutable[i-j] intValue];//待排序的数 后面一位数
if(dnumber<yNumber){//如果待排序的数小于已经排序好的数
[arrMutable exchangeObjectAtIndex:i-j-1 withObjectAtIndex:i-j];
}
}
NSLog(@"%@",arrMutable);
}
//冒泡排序 冒泡排序就是找出最大值,相邻的两位数进行比较,每比较一次进行位移一次,冒泡和直接排序的不同有两点(1)冒泡是找出最大值,直接排序是找出最小值(2)冒泡排序是相邻两位数以位移的方式比较,直接插入排序是从数组小标为0开始和后面的数依次排序
for(int i=0;i<arrMutable.count;i++){
for(int j=0;j<arrMutable.count-i-1;j++){
int one=[arrMutable[j] intValue];
int two=[arrMutable[j+1] intValue];
if(one>two){
[arrMutable exchangeObjectAtIndex:j+1 withObjectAtIndex:j];
}
}
NSLog(@"%@",arrMutable);
}
// arr=@"53,76,34,56,49"
//(1)arr[0]和arr[1]比较,arr[0]小于arr[1] 位置不变,接着和下一位arr[2]比较,arr[0]大于arr[2],这时候arr[0]和arr[2]的值互换,注意是值互换,这时候变成了34、76、53、56、49,然后继续还是arr[0]和arr[3]和arr[4]比较,第一次循环完得到的排序是34、76、53、56、49,以此类推,第一次循环完找出最小的一个数,放在arr[0]这个位置,第二次循环找出第二小的数值放在arr[1]的位置。
NSMutableArray *arrMutable=[NSMutableArray arrayWithObjects:@"53",@"76",@"34",@"56",@"49", nil];
for (int i=0; i<arrMutable.count; i++) {
for (int j=i+1;j<arrMutable.count; j++) {
int number=[arrMutable[i] intValue];
int twoNumber=[arrMutable[j] intValue];
if(number>twoNumber){//如果后面数大于待排序的数时,两者替换位置
[arrMutable exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
NSLog(@"%@",arrMutable);
}
//折半排序 原理就是未排序的数和已经排序好的数进行比较,然后插入他们其中他是在直接排序基础上面优化而来的:如下图
for (int i=0; i<arrMutable.count; i++) {
for (int j=0;j<i; j++) {//i表示已经排序好的个数,
int yNumber=[arrMutable[i-j-1] intValue];//前面一位数
int dnumber=[arrMutable[i-j] intValue];//待排序的数 后面一位数
if(dnumber<yNumber){//如果待排序的数小于已经排序好的数
[arrMutable exchangeObjectAtIndex:i-j-1 withObjectAtIndex:i-j];
}
}
NSLog(@"%@",arrMutable);
}
//冒泡排序 冒泡排序就是找出最大值,相邻的两位数进行比较,每比较一次进行位移一次,冒泡和直接排序的不同有两点(1)冒泡是找出最大值,直接排序是找出最小值(2)冒泡排序是相邻两位数以位移的方式比较,直接插入排序是从数组小标为0开始和后面的数依次排序
for(int i=0;i<arrMutable.count;i++){
for(int j=0;j<arrMutable.count-i-1;j++){
int one=[arrMutable[j] intValue];
int two=[arrMutable[j+1] intValue];
if(one>two){
[arrMutable exchangeObjectAtIndex:j+1 withObjectAtIndex:j];
}
}
NSLog(@"%@",arrMutable);
}
0 0
- OC下的冒泡排序,直接插入排序,折半插入排序
- 直接插入排序、折半插入排序、冒泡排序、快速排序的算法实现
- oc中的排序 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 排序学习(直接插入排序,折半插入排序,冒泡排序,快速排序,简单选择排序)
- 算法<改进的冒泡排序、直接插入排序、折半插入排序、希尔排序、快速排序、归并排序>
- oc实现冒泡、直接插入排序
- 直接插入排序与折半插入排序
- 直接插入排序和折半插入排序
- 直接插入排序和折半插入排序
- 直接插入排序,折半插入排序
- IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 冒泡排序和插入排序(直接插入、折半插入、希尔排序)(殷人昆版)
- 冒泡排序、直接插入排序
- 直接插入排序、折半插入排序、shell插入排序
- 插入排序(希尔排序、直接插入、折半插入排序)
- 插入排序之直接插入排序和折半插入排序
- 数据结构-插入排序(直接插入排序+折半插入排序)
- C++实现直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序,快速排序,堆排序
- Android系统APP访问硬件之JNI方式0002
- Longest Palindromic Substring(字符串处理)
- 双目校正:杂谈
- android性能分析之Systrace的使用
- 开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载
- OC下的冒泡排序,直接插入排序,折半插入排序
- 12.kafka Producer Example
- jMeter使用案例
- Spark大数据处理之从WordCount看Spark大数据处理的核心机制
- php面试常用题目精解(一)
- 记录一些android的基础知识
- PHP面向对象编程设计模式(三)工厂模式
- JavaScript中的setTimeout()和setInterval()
- VS + wxWidgets开发配置指南