插入排序的思路
插入排序的思想比较简单就是利用把一个数备用放到另一个空间里,用这个空间值与数组里的数进行比较进行遍历。以升序为例若这个值比数组值小则放到和其比较的数前面,比它大的则往后移一个空间。
空间复杂度
利用的存储空间是常数个空间,因而其空间复杂度为 O(1),其时间复杂度分为好的情况只需要遍历一次即为O(n),坏的的情况则为O(N^2).
代码
下面直接上代码
void fun(int* arr, int n) {
for (int i = 0; i < n - 1; i++) {//控制循环次数
int end = i;
int tem = arr[end + 1];//将值放入备份空间
while (end >= 0) {
if (tem<arr[end]) {
arr[end + 1] = arr[end];
end--;
}
else {
break;
}
}
arr[end + 1] = tem;
}
}
int main() {
int arr[6] = { 1,7,3,2,5,4 };
fun(arr, 6);
for (int i = 0; i < 6; i++) {
cout << arr[i];
}
return 0;
}
结果
希尔排序的思路
插入排序的思想比较简单就是在插入排序的基础上,进行的就是将数组分为多组数据然后同时进行插入排序,即可完成排序,希尔排序的好处时平均时间复杂度稳定,不会像其他排序一样极端。
空间复杂度
利用的存储空间是常数个空间,因而其空间复杂度为 O(1),其时间复杂度O(N*lon3N).
代码
下面上代码
void shell(int* arr, int n) {
int group = n;
while (group > 1) {
group = group / 3 + 1;
for (int i = 0; i < n -group; i++) {
int end = i;
int tem = arr[end + group];
while (end >= 0) {
if (tem < arr[end]) {
arr[end + group] = arr[end];
end-=group;
}
else {
break;
}
}
arr[end + group] = tem;
}
}
}
int main() {
int arr[6] = { 1,7,3,2,5,4 };
shell(arr, 6);
for (int i = 0; i < 6; i++) {
cout << arr[i];
}
return 0;
}