- 直接插入排序算法思想:
插入排序首先考虑数组的前两个元素,即data[0]与data[1],如果次序颠倒了,就交换。然后考虑data[2],将其插入到前面已经排序好的位置上,依次到最后一个元素为止。
- 直接插入排序代码如下:
-(void)insertSort{
printf("直接插入排序之前数组结果为:\n");
[self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
printf(" %d",[obj intValue]);
}];
for(NSInteger i = 1; i < self.array.count; i ++){
NSInteger num1 = [self.array[i] intValue];
for (NSInteger j = 0; j <= i; j ++) {
NSInteger num2 = [self.array[j] intValue];
if(num2 > num1){
NSInteger tmp = [self.array[i] intValue];
self.array[i] = self.array[j];
self.array[j] = [NSNumber numberWithInteger:tmp];
}
}
}
printf("\n直接插入排序之后数组结果为:\n");
[self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
printf(" %d",[obj intValue]);
}];
}
*直接选择排序:
第一次找序列中最小的元素,与第一个位置进行交换;第二次找第二小的元素与2个位置的元素进行交换。即在每次迭代中找出data[i]....data[n-1]的最小元素与data[i]进行交换,示意图如下:
- 直接选择排序代码如下:
-(void)selectSort{
printf("直接选择排序之前数组结果为:\n");
[self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
printf(" %d",[obj intValue]);
}];
for(NSInteger i = 0; i < self.array.count - 1; i ++){
NSInteger min = I;
for (NSInteger j = i + 1; j < self.array.count; j ++) { //找剩余数组的最小值
if([self.array[j] intValue] < [self.array[min] intValue]){
min = j;
}
}
NSInteger tmp = [self.array[i] intValue];
self.array[i] = self.array[min];
self.array[min] = [NSNumber numberWithInteger:tmp];
}
printf("\n直接选择排序之后数组结果为:\n");
[self.array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
printf(" %d",[obj intValue]);
}];
}
-
快速排序:思路如下:
- 快速排序 代码为:
-(void)quickSort:(NSMutableArray*) array lowIndex:(NSInteger) low heightIndex:(NSInteger)height{
NSInteger i = low;
NSInteger j = height;
while (i < j) {
if (i < j && ([array[i] intValue] < [array[j] intValue])) {
i++;
}
if (i < j && ([array[i] intValue] >= [array[j] intValue])) {
NSInteger tmp = [self.array[i] intValue];
self.array[i] = self.array[j];
self.array[j] = [NSNumber numberWithInteger:tmp];
j --;
}
[self quickSort:array lowIndex:low heightIndex:i-1];
[self quickSort:array lowIndex:i + 1 heightIndex:height];
}
}