- 冒泡排序
/** 冒泡排序的特点
* 我们取出第一个数 和 第二个数 将最小的数 赋给第一个数 然后让第二个数与 第三个数比较 将最小的数 赋给 第二个数 然后依次类推
* 第一轮下来我们就获取到了最大的数 第二轮就从第二个数开始 我们就获取到了第二个比较大的数 通过循环就可以实现 升序
*/
NSMutableArray * dataArr = [NSMutableArray arrayWithArray:@[@"11", @"5", @"89", @"354", @"40", @"23", @"98", @"31", @"103", @"19"]];
countNum = 0;
for(int i = 0 ; i < [dataArr count]; i++){
for(int j = 0; j< [dataArr count]-1-i; j++){
countNum ++ ;
if([dataArr[j] integerValue] > [dataArr[j+1] integerValue]){
NSString * temp = dataArr[j];
dataArr[j] = dataArr[j+1];
dataArr[j+1] = temp;
}
}
}
NSLog(@"%ld次-冒泡排序之后数组的顺序--%@", (long)countNum, dataArr);
结果:
2018-04-11 11:34:37.579219+0800 iOS_算法[1713:72029] 45次-冒泡排序之后数组的顺序--(
5,
11,
19,
23,
31,
40,
89,
98,
103,
354
)
- 选择排序
/** 选择排序的特点
* 我们取出第一个数 然后让它与剩下的数一一比较 那么一轮下来 我们就能确定最小值
*/
NSMutableArray * selectArr = [NSMutableArray arrayWithArray:@[@"11", @"5", @"89", @"354", @"40", @"23", @"98", @"31", @"103", @"19"]];
countNum = 0;
for(int i = 0; i < selectArr.count-1; i ++){
for(int j = i+1; j < selectArr.count; j ++){
countNum ++ ;
if([selectArr[i] integerValue] > [selectArr[j] integerValue]){
NSString * temp = selectArr[i];
selectArr[i] = selectArr[j];
selectArr[j] = temp;
}
}
}
NSLog(@"%ld次_选择排序之后数组的顺序--%@", countNum,selectArr);
结果:
2018-04-11 11:34:37.579467+0800 iOS_算法[1713:72029] 45次_选择排序之后数组的顺序--(
5,
11,
19,
23,
31,
40,
89,
98,
103,
354
)
- 插入排序
/** 插入排序的特点
* 第一步我们取出第二数 然后让 第二个数与第一个数比较 如果 第二个数< 第一个数 那么我们就将数组第二个数的位子换成第一个数的值 然后 j--
*/
NSMutableArray * insertArr = [NSMutableArray arrayWithArray:@[@"11", @"5", @"89", @"354", @"40", @"23", @"98", @"31", @"103", @"19"]];
countNum = 0;
for(int i = 1; i < insertArr.count; i++){
int j = i;
NSString * temp = insertArr[i];
countNum ++ ;
while (j > 0 && [temp integerValue] < [insertArr[j-1] integerValue]) {
[insertArr replaceObjectAtIndex:j withObject:insertArr[j-1]];
j--;
}
[insertArr replaceObjectAtIndex:j withObject:temp];
}
NSLog(@"%ld次_插入排序最终结果---%@", countNum, insertArr);
结果:
2018-04-11 11:34:37.579625+0800 iOS_算法[1713:72029] 9次_插入排序最终结果---(
5,
11,
19,
23,
31,
40,
89,
98,
103,
354
)
- 希尔排序
/** 希尔排序的特点
* 类似于对半查找 但又不一样.
*/
NSMutableArray * hillArr = [NSMutableArray arrayWithArray:@[@"11", @"5", @"89", @"354", @"40", @"23", @"98", @"31", @"103", @"19"]];
countNum = 0;
int gap = hillArr.count/2.0;
while (gap>=1) {
for(int i = gap ; i< hillArr.count; i++){
countNum ++ ;
NSString * temp = hillArr[i];
int j = i;
while (j>gap && [temp integerValue] < [hillArr[j-gap] integerValue]) {
[hillArr replaceObjectAtIndex:j withObject:hillArr[j-gap]];
j-=gap;
}
[hillArr replaceObjectAtIndex:j withObject:temp];
}
gap = gap/2;
}
NSLog(@"%ld次_希尔排序最终结果---%@", countNum, insertArr);
结果:
2018-04-11 11:34:37.579936+0800 iOS_算法[1713:72029] 22次_希尔排序最终结果---(
5,
11,
19,
23,
31,
40,
89,
98,
103,
354
)
- 二分查找
/** 二分查找的特点
* 二分查找有一个特点那就是这个数组一定是排序好的
*/
NSArray * erFenArr = @[ @"5", @"22", @"24", @"40", @"45", @"98"];
NSLog(@"二分查找最终输出的值%ld",[self BinarySearch:erFenArr target:@"24"]);
- (NSInteger)BinarySearch:(NSArray *)array target:(id)key
{
NSInteger left = 0;
NSInteger right = [array count] - 1;
NSInteger middle = [array count] / 2;
while (right >= left) {
middle = (right + left) / 2;
if (array[middle] == key) {
return middle;
}
if (array[middle] > key) {
right = middle - 1;
}
else if (array[middle] < key) {
left = middle + 1;
}
}
return -1;
}
结果:
2018-04-11 12:06:12.266219+0800 iOS_算法[2212:95127] 二分查找最终输出的值1
- 快排
/** 快排 这个也蛮重要的 面试的话有可能会问
*/
NSMutableArray * kuaipaiArr = [NSMutableArray arrayWithArray:@[@"11", @"5", @"89", @"354", @"40", @"23", @"98", @"31", @"103", @"19"]];
countNum = 0;
[self TB_KuaipaiWithArr:kuaipaiArr low:0 hight:kuaipaiArr.count-1];
NSLog(@"%ld次_快速排序最终结果---%@", countNum, kuaipaiArr);
- (void)TB_KuaipaiWithArr:(NSMutableArray *)kuaipaiarr low:(NSInteger)low hight:(NSInteger)hight{
if(low >= hight) return;
NSInteger i = low;
NSInteger j = hight;
NSString * temp = kuaipaiarr[low];
while (i < j) {
while (i<j &&[temp integerValue] <= [kuaipaiarr[j] integerValue]) {
j--;
}
kuaipaiarr[i] = kuaipaiarr[j];
while (i<j&& [temp integerValue] >= [kuaipaiarr[i] integerValue]) {
i++;
}
countNum ++ ;
kuaipaiarr[j] = kuaipaiarr[i];
}
kuaipaiarr[i] = temp;
[self TB_KuaipaiWithArr:kuaipaiarr low:low hight:i-1];
[self TB_KuaipaiWithArr:kuaipaiarr low:i+1 hight:hight];
}
结果:
2018-04-11 12:06:12.266351+0800 iOS_算法[2212:95127] 9次_快速排序最终结果---(
5,
11,
19,
23,
31,
40,
89,
98,
103,
354
)
网友评论