C++插入排序算法

插入排序的时间复杂度为o(n*n)。

逻辑分析:

将数组第一个元素认为是有序数组,然后比较第二个元素的关键字与第一个元素关键字的大小,有序排列。

将数组后面一个元素的关键字插入到前面的有序数组中,一直重复至排序完成。

代码分析:    

数组a[]={2,1,4,5,3,8,7,9,0,6},length=10。

i=1,j=0,a[j+1]=1<a[j] =2,故交换a[j],a[j+1],数组 a[]={1,2,4,5,3,8,7,9,0,6}。

i=1,j=-1,不做任何操作。

i=2,j=1,a[j+1]=4>a[j] =2,不做任何操作,数组不改变。

i=3,j=2,a[j+1]=5>a[j] =4,不做任何操作,数组不改变。

i=4,j=3,a[j+1]=3<a[j] =5,故交换a[j],a[j+1],数组 a[]={1,2,4,3,5,8,7,9,0,6}。

i=4,j=2,a[j+1]=3<a[j] =4,故交换a[j],a[j+1],数组 a[]={1,2,3,4,5,8,7,9,0,6}。

i=4,j=1,a[j+1]=3>a[j] =2,不做任何操作,数组不改变。

i=5,j=4,a[j+1]=8>a[j] =5,不做任何操作,数组不改变。

i=6,j=5,a[j+1]=7<a[j] =7,故交换a[j],a[j+1],数组 a[]={1,2,3,4,5,7,8,9,0,6}。

i=6,j=4,a[j+1]=7>a[j] =5,不做任何操作,数组不改变。

i=7,j=6,a[j+1]=9>a[j] =8,不做任何操作,数组不改变。

i=8,j=7,a[j+1]=0<a[j] =9,故交换a[j],a[j+1],数组 a[]={1,2,3,4,5,7,8,0,9,6}。

j--,直到数组 a[]={0,1,2,3,4,5,7,8,9,6}。

i=9,j=8,a[j+1]=6<a[j] =9,故交换a[j],a[j+1],数组 a[]={0,1,2,3,4,5,7,8,6,9}。

j--,直到数组 a[]={0,1,2,3,4,5,6,7,8,9}。

#include<iostream>
#include<cstdlib>

using namespace std;

//交换数组元素位置位置
void swap(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}


/*
插入排序。注意,若后面一个元素比其前面一个元素小,则将这两个元素交换位置,然后再来比较这个插入元素与前面一个元素的大小,若小,则还需要交换这两个元素位置,一直到这个插入元素在正确的位置为止
*/
void insertSort(int a[],  int length)
{
	for (int i = 1; i < length; i++)
	{
		for (int j = i - 1; j >= 0 && a[j + 1] < a[j]; j--)
		{
			swap(a[j], a[j + 1]);
		}
	}

}

int main()
{
	int a[] = { 2,1,4,5,3,8,7,9,0,6 };

	insertSort(a, 10);

	for (int i = 0; i < 10; i++)
	{
		cout << a[i] << "";

	}
	cout << endl;
	system("pause");
	return 0;

}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值