插入排序_C++实现

怎甘沉沦 提交于 2019-12-25 19:21:50
#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²)

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!