依旧假设有一段数组
[8,9,2,5,7,4,1,3,6]
也从基础的O(n^2)考虑
1.从i = 1开始索引的第二个位置对比前一个数组元素
for i = 1;i < array.count; i ++
2.拷贝一份当前数组[i]的元素
tempArr = array[i]
3.声明一个变量j保存合适插入的位置,因为这个j在第二层循环当中作初始化逻辑外部拿不到
NSInteger j; var j Int var j: Int //
4.如果当前tempArr比上一个array[j-1]要小
for j = i; j > 0 && array[j-1] > tempArr; j--
swap(arr[j],arr[j-1])
5.最后把交换过后的数组赋值给array
array[i] = tempArr;
public class InsertSort {
public static int[] Insert(int[] arr) {
for (int i = 0;i < arr.length; i ++) {
int tempArr = arr[i]; //这里有点疑问 为什么复制给tempArr的是arr[i] 是个Int类型
int j;
for (j = i; j > 0 && arr[j-1] < tempArr; j--) {
arr[j] = arr[j-1];
}
arr[j] = tempArr;
}
return arr;
}
}
func InsertSort(arr []int) []int {
for i := 1;i < len(arr) ; i++ { //照旧的 遍历数组
tempArr := arr[i]
//寻找arr[j] 合适插入的位置
var j int
for j = i; j > 0 && arr[j-1] > tempArr; j-- {
arr[j] = arr[j-1]
}
arr[j] = tempArr
}
return arr
}
public func InserSort<T: Comparable>(_ array: [T]) -> [T] {
var tempArr = array
for i in 1..<array.count {
var j = i
while j > 0 && tempArr[j] < tempArr[j-1] {
tempArr.swapAt(j-1, j)
j -= 1
}
}
return tempArr
}
+ (NSArray *)InsertSort:(NSArray *)array {
NSMutableArray *arr = [[NSMutableArray alloc]initWithArray:array];
for (NSInteger i = 1; i < array.count ; i++) {
NSArray *temp = arr[i];
NSInteger j;
for (j = i; j > 0 && array[j - 1] > temp; j--) {
arr[j] = arr[j-1];
}
arr[j] = temp;
}
return arr;
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。