插入排序是一种简单快速的排序算法,就是把一组无序的数据,以第一个数据为准,假设第一个数据是经过排序过的,把第二个数据和排好的数据进行比较,注意插入排序是从后向前进行比较,如果此时有一个新元素,则从已经排序的序列的尾部向前进行比较,如果排序过的序列的元素值大于新元素,则把新元素插入到该元素的前面。
/******************************************************************************
*
* file name : 插入排序
* author : Wzy
* data : 2025/12/12
* function : 给定一个数组,数组里面存有10个随机整数,然后利用插入排序实现整数序列的升序排列,使用数组实现
* note : None
*
* copyRight (c) 2025 17630246607@163.com All Right Reseverd
* ****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
/******************************************************************************
*
* func name : InsertSort
* function : 实现插入排序
* argument :
* @arr[10]:待排序的整形数组
* @arrsize:数组中元素的个数
* retval : None
* author : Wzy
* date : 2025/12/12
* note : 插入排序:是把无序序列中的元素依次插入到有序序列中,一般是从有序序列的尾部开始比较
*
* ****************************************************************************/
#if 1
void InsertSort(int arr[],int arrsize)
{
int temp = 0; //备份当前待插入元素的值
int Current_prev = 0; //备份当前待插入元素的直接前驱的下标
//1.可以假设把数组中的第一个元素作为有序序列的元素,剩下的元素作为无序序列
for (int i = 1; i <arrsize ; ++i)
{
//2.备份当前待插入元素的值
temp = arr[i];
//3.把当前待插入元素和有序序列中的元素依次进行比较,剩下的元素为无序序列
for (int j = i-1; j >= 0; j--)
{
//如果当前待插入元素的值 小于 待插入元素的直接前驱元素的值,则把待插入元素的直接前驱元素向后移
if (temp < arr[j])
{
Current_prev = j; //备份当前待插入元素的直接前驱的下标
arr[j+1] = arr[j]; //后移
}
else
{
//当前待插入元素的值 大于 待插入元素的直接前驱元素的值,则备份当前待插入元素的下标
Current_prev = j+1;
break;
}
}
//4.把待插入元素插入到指定位置
arr[Current_prev] = temp;
}
}
#endif
int main(int argc, char const *argv[])
{
//定义一个整形数组存储10个整数
int arr[] = {14,23,12,5,8,3,9,10,33,6,11};
printf("排序前整数序列\n");
for (int i = 0; i <sizeof(arr)/sizeof(arr[0]); ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
InsertSort(arr,sizeof(arr)/sizeof(arr[0]));
printf("排序后整数序列\n");
for (int i = 0; i <sizeof(arr)/sizeof(arr[0]); ++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}
测试结果
