数据结构与算法之直接插入排序

  • ​​前提条件​​
  • ​​简介​​
  • ​​直接插入排序算法​​
  • ​​完整代码​​
  • ​​输出结果​​

前提条件

  • 熟悉C语言与指针
  • 熟悉数据结构与算法

简介

  • 直接插入排序(Straight Insertion Sort)是一种最简单且稳定的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表
  • 对于数据结构与算法之直接插入排序_数据结构个元素,一共需要进行数据结构与算法之直接插入排序_插入排序_02轮比较,而第k轮比较需要进行k次数组元素的两两比较,因此共需要进行的比较次数为:数据结构与算法之直接插入排序_排序算法_03,所以插入排序的时间复杂度同冒泡排序一样,也为数据结构与算法之直接插入排序_直接插入排序_04

直接插入排序算法

void insertSort(int data[],int n)
/*直接插入排序*/
{
int i,j;
int temp;
for ( i = 1; i < n; i++)
{
if(data[i]<data[i-1])
{
/*若后一个元素小于前一个元素,位置互换*/
temp=data[i];
data[i]=data[i-1];
/*
位置互换后,若前面还有元素,则还要与前面元素比较,
若前面元素还有比当前元素小的元素,还需要位置互换
*/
for ( j = i-2; j >=0 && data[j]>temp; j--)
{
data[j+1]=data[j];
}
data[j+1]=temp;
}
}
}

数据结构与算法之直接插入排序_排序算法_05

完整代码

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

void insertSort(int data[],int n)
/*直接插入排序*/
{
int i,j;
int temp;
for ( i = 1; i < n; i++)
{
if(data[i]<data[i-1])
{
/*若后一个元素小于前一个元素,位置互换*/
temp=data[i];
data[i]=data[i-1];
/*
位置互换后,若前面还有元素,则还要与前面元素比较,
若前面元素还有比当前元素小的元素,还需要位置互换
*/
for ( j = i-2; j >=0 && data[j]>temp; j--)
{
data[j+1]=data[j];
}
data[j+1]=temp;
}
}
}

int main(){
int data[6]={4,6,5,1,3,2};
insertSort(data,6);
printf("the result of the insertsort:\n");
for (int i = 0; i < 6; i++)
{
printf("%d ",data[i]);
}
printf("\n");
system("pause");
return 0;
}

输出结果

数据结构与算法之直接插入排序_直接插入排序_06