iOS 冒泡排序,直接插入排序,希尔排序

xiaoxiao2025-07-15  11

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); }
转载请注明原文地址: https://www.6miu.com/read-5033113.html

最新回复(0)