1.前言:
作为一个IOS开发工程师,上班没事的时候试着自己写一下排序的,感觉应该很快写出来,结果还是在修修改改中调试更正过来。眼高手低的毛病得改,什么都得敲一下才能记得更牢固,还是记录一下吧。
2.冒泡排序
原理:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
- (void)bubbleSort{ //冒泡排序
for (int k = 0; k<self.sortArray.count; k++) {
for (int i = 0; i<self.sortArray.count; i++) {
NSString *fontItem = self.sortArray[i];
if(i<self.sortArray.count-1){
NSString *backItem = self.sortArray[i+1];
if([fontItem integerValue] > [backItem integerValue]){
[self.sortArray replaceObjectAtIndex:i withObject:backItem];
[self.sortArray replaceObjectAtIndex:i+1 withObject:fontItem];
}
}
}
}
NSLog(@"冒泡之后的排序为:%@",self.sortArray);
}
3插入排序
原理:
通过当前元素,与之前的所有元素进行对比,将当前元素插入到,已经确定的最小元素前面 ,重复操作之后直接排序结束
- (void)dirInsert{ //直接插入
for (int i = 0; i<self.sortArray.count; i++) {
NSString *fontItem = self.sortArray[i];
if(i<self.sortArray.count-1){
NSString *backItem = self.sortArray[i+1];
if([fontItem integerValue] > [backItem integerValue]){
for (int k =0 ; k<i; k++) {
NSString *searchInFont = self.sortArray[k];
if([backItem integerValue] <=[searchInFont integerValue]){
[self.sortArray removeObjectAtIndex:i+1];
[self.sortArray insertObject:backItem atIndex:k];
break;
}
}
}
}
}
NSLog(@"直接插入之后的排序为:%@",self.sortArray);
}
4希尔排序
原理:
希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。
- (void)shellSort{
int gap = (int)self.sortArray.count / 2;
while (gap >= 1) {
for(int i = gap ; i < [self.sortArray count]; i++){
NSInteger temp = [[self.sortArray objectAtIndex:i] intValue];
int j = i;
while (j >= gap && temp < [[self.sortArray objectAtIndex:(j - gap)] intValue]) {
[self.sortArray replaceObjectAtIndex:j withObject:[self.sortArray objectAtIndex:j-gap]];
j -= gap;
}
[self.sortArray replaceObjectAtIndex:j withObject:[NSNumber numberWithInteger:temp]];
}
gap = gap / 2;
}
NSLog(@"希尔排序为:%@",self.sortArray);
}