演算法---插入排序(直接插入排序)
阿新 • • 發佈:2019-02-07
插入排序:其基本操作就是將一個數據插入到已經拍好序的有序資料中,從而得到一個新的、個數加一 的有序資料,演算法適用於少量資料的排序。
包括:直接插入排序,二分插入排序(又稱折半插入排序),連結串列插入排序,希爾排序(又稱縮小增量排序)。屬於穩定排序的一種(通俗地講,就是兩個相等的數不會交換位置)
/*
直接插入排序
基本思想:
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);
}