C语言实现直接插入排序

直接插入排序
  1. 实现思想
    • 将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。
  2. 时间复杂度
    • 最好情况:O(n)
    • 最坏情况:O(n²)
    • 平均时间复杂度:O(n²)
  3. 空间复杂度
    • O(1)
  4. 稳定性
    • 稳定
代码
	#include
	
	//直接插入排序
	void InsertSort(int r[],int n){
		int i,j;
		for(i=2;i<=n;i++){ //默认r[1]为有序表,逐渐将无序表r[2]-r[8]逐步变为有序表
			if(r[i]<r[i-1]){ //若待插入元素比有序表最后一个元素小,则需要移动位置
				r[0]=r[i];   //r[0]作为哨兵,存储待插入元素
				r[i]=r[i-1];
				for(j=i-2;r[0]<r[j];j--) //r[i-1]已和r[0]比较过,无需重复比较
					r[j+1]=r[j];
				r[j+1]=r[0];
			}
		}
	}
	
	void Output(int r[],int n){
		int i;
		for(i=1;i<=n;i++){   //从r[1]开始输出,r[0]作为哨兵,不输出
			printf("%d ",r[i]);
		}
		printf("\n");
	}
	
	void main(){
		int n=8;  //对8个元素进行排序
		int r[9]={0,3,1,7,5,2,4,9,6}; //r[0]作为哨兵,r[1]到r[8]存储元素
		printf("未排序的集合为:\n");
		Output(r,n);
		InsertSort(r,n);    //直接插入排序
		printf("从小到大排序后的集合为:\n");
		Output(r,n);
	}

你可能感兴趣的:(数据结构习题,c语言,排序算法,算法)