page contents

C-插入排序

插入排序
插入排序的规则是:
第一轮开始时默认序列中第一个数据是有序的,之后各个数据以此为基准,
判断是插入在此数据的前面还是后面,之后的数据依次向后移动,腾出位置,让数据插入,
以此类推,直到整个序列有序为止。每比较一次,
如果满足条件(升序:前面一个数比后面需要插入的数大),就直接交换。
特点:对基本有序的序列插入排序速度相对而言比较快,插入排序的优势越明显,数据量越多,劣势也越明显 。
代码示例:
void InsertSort(int x[], int n)//插入排序
{
int i, j, k;
for (i = 1; i < n; i++)
{
for (j = i; j >= 0; j--)
if (x[j - 1]>x[j])
{
k = x[j - 1];
x[j - 1] = x[j];
x[j] = k;
}
}
for (i = 0; i < n;i++)
printf("%d\t",x[i]);
}

main(){

//定义无序数组

srand((unsigned)time(NULL));

int arr[10];

for (int i = 0; i < 10; i++)

{

arr[i] = rand() % 100;

printf("arr[%d]:%d\n", i, arr[i]);

}

InsertSort(arr,10);

printf("-------------------------------\n");

printf("交换后:\n");

for (int i = 0; i < 10; i++)

{

printf("arr[%d]:%d\n", i, arr[i]);

}

}

优化后的插入排序:
void insert_sort(int arr[],int len)//优化后的插入排序
int tempVal;
int j;
for (int i = 1; i < len; ++i)//确定循环次数,改变i是为了把i直接当成下标
{
tempVal = arr[i];//把待插入的数据另行保存一份
j = i - 1;
while (j >= 0 && tempVal < arr[j])
{
arr[j + 1] = arr[j];
--j;
}

  • 发表于 2021-08-10 22:14
  • 阅读 ( 395 )
  • 分类:C/C++开发

你可能感兴趣的文章

0 条评论

请先 登录 后评论
文双
文双

NB

71 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章