1. 程式人生 > >演算法---插入排序(直接插入排序)

演算法---插入排序(直接插入排序)

插入排序:其基本操作就是將一個數據插入到已經拍好序的有序資料中,從而得到一個新的、個數加一 的有序資料,演算法適用於少量資料的排序。
包括:直接插入排序,二分插入排序(又稱折半插入排序),連結串列插入排序,希爾排序(又稱縮小增量排序)。屬於穩定排序的一種(通俗地講,就是兩個相等的數不會交換位置)

/*
直接插入排序
基本思想:
1,插入演算法把要排序的陣列分成兩個部分:第一部分包含了這個陣列的所有元素,但將最後一個元素除外(讓陣列多一個空間才有插入的位置),而第二部分就只包含這一個元素(即帶插入元素)。在第一部分排序完成後,再將這個最後元素插入到已經拍好序的第一部分中。
2,每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。
 */
NSMutableArray *array = [NSMutableArray arrayWithObjects:@12, @23, @3, @5, @43, nil]; for (NSInteger i = 1; i < array.count; i++) { NSInteger temp = [array[i] integerValue]; NSInteger j = i - 1; //與已排序的數逐一比較 while ((j >= 0) && ([array[j] integerValue] > temp)) { array
[j + 1] = array[j]; j--; } //存在大於temp的數,插入陣列最前端 if (j != (i-1)) { array[j + 1] = [NSNumber numberWithInteger:temp]; } NSLog(@"%d--%@", i, array); }

控制檯列印:
1–(12, 23, 3, 5, 43)
2–(3, 12, 23, 5, 43)
3–(3, 5, 12, 23, 43)
4–(3, 5, 12, 23, 43)

第二種方法:

NSMutableArray *array = [NSMutableArray arrayWithObjects:@12, @23, @3, @5, @43, nil];
    for (int i = 1; i < array.count; i++) {
        for (int j = i; j > 0; j--) {
            if ([array[j] integerValue] < [array[j - 1] integerValue]) {
                NSInteger temp = [array[j] integerValue];
                array[j] = array[j - 1];
                array[j - 1] = [NSNumber numberWithInteger:temp];
            }
        }
        NSLog(@"%d--%@", i, array);
    }