插入排序_C++实现

#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²)

如果代码有误,希望大伙指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值