#include <iostream>
using namespace std;
//插入排序函数
int* insert_Sort(int A[],int num);
//重载输出函数,使得 “<<” 能够输出数组
ostream &operator <<(ostream &os, int* A);
int main()
{
int arrays[11] = { 10,9,8,7,6,5,4,3,2,1,0 }; //声明数组
insert_Sort(arrays,11); //插入排序函数
cout << arrays; //输出数组
cout << endl;
return 0;
}
int* insert_Sort(int* A,int num) {
for (int i = 1;i < num;i++) { //遍历数组
int key = A[i]; //取出第i个元素作为目标排序元素
int j = i - 1; //当前元素的前一个
while (j >= 0 && A[j] > key) { //开始遍历目标排序元素之前的所有元素
A[j + 1] = A[j]; //如果第j个元素比目标排序元素大,则把第j个元素后移一个
j -= 1; //j减一继续看前面一个元素
}
A[j + 1] = key; //当遇到一个元素小于目标排序元素,则把目标排元素放在这个较小元素的后面
}
return A; //返回的是数组的首地址
}
ostream &operator <<(ostream &os, int* A) {
for (int i = 0;i < 11;i++) {
os << " " << A[i]<<" ";
}
return os;
}
时间代价分析:
最好情况:数组已经排好序,此时代价为数组规模 n 的线性函数,为 Θ(n)
最差情况:数组刚好完全倒序,此时的代价为数组规模 n 的二次函数,为Θ(n²)
如果代码有误,希望大伙指正。
来源:CSDN
作者:IT奶牛
链接:https://blog.csdn.net/qq_43078427/article/details/103699290