排序算法入门——直接插入排序

 

时间复杂度

 

·        直接插入排序最好的时间复杂度为O(n)

·        直接插入排序的最坏时间复杂度为O(n^2)

·        因此直接插入排序总的平均时间复杂度为O(n^2)

注:具有稳定性

排序原理

            虽然给出的排序数字为一个数组或者别的容器,但是排序的时候,就当是顺序给你一个又一个数字,给你一个你排一个(类似于扑克牌,打牌的时候,你拿一张牌,你要排一下顺序,看拿到的牌的大小,大的往后,小的直接插前面,但不同的是你拿到牌直接能看出来放哪,而在计算机里的排序,必须先比较,前面已经排好的数字,你才知道放哪),直接插入排序就是按这个思想来走的。

测试截图

要排序的数字为2,5,3,6,1,7

 《排序算法入门——直接插入排序》

左边是排好的数字,右边是还没排的,从这个排序过程可以看出,运算过程是取一个排一个,

以第二遍为例,2,5已经排好,下一个要排的是3,所以第三遍,3先跟5比较,3<5,所以,3跟2在比较,3>2,因此3放2,5之间。

c++(从小往大排)

#include<iostream>
using namespace std;
void directsort(int a[6],int n){
	int temp;
	for(int i=1;i<n;i++){//不从0取是因为拿到第一个不用排,就像你不会拿第一张扑克就想排在哪里
	/*    中间注释部分是上面截图的运行过程展示,与排序过程无关
		cout<<"第"<<i<<"遍  ";
		for(int k=0;k<i;k++){
			cout<<a[k]<<" ";
		}
		cout<<"    ";
		for(int b=i;b<n;b++){
			cout<<a[b]<<" ";
		}
		cout<<endl;
      */
		if(a[i]<a[i-1]){  //如若拿到的数字比排好序中最大的数小,就像上例3<5
			temp=a[i];  //把要排序数字赋值给临时变量
			for(int j=i-1;j>=0&&a[j]>temp;j--){//这个过程相当于上例中,从5往前比较
				a[j+1]=a[j];//把比要排序的数字大的都往后挪一位,给排序数字留出位置
,			}
			a[j+1]=temp;//循环结束,把排序数字放到留的位置上
		}
	}
}
void print(int a[6],int n){//
	for(int i=0;i<n;i++){
		cout<<a[i]<<" ";
	}
	cout<<endl;
}
int main(){
	int a[6]={2,5,3,6,1,7};
	directsort(a,6);//排序
	print(a,6);//输出排好序的数组
}

 

 

 

    原文作者:排序算法
    原文地址: https://blog.csdn.net/zhen921/article/details/80277058
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞