当前位置:   article > 正文

C语言-直接插入排序算法_c语言直接插入排序

c语言直接插入排序

直接 插入排序 (Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。.

废话不多说先看看代码

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. //直接插入排序法
  3. #include <stdio.h>
  4. void Compare(int arr[], int len)
  5. {
  6. int i = 0;
  7. for (i = 0; i < len-1; i++)//len减一因为要插入的数是i+1
  8. {
  9. int M = i;//记录有序列表最后应该元素下标
  10. int num = arr[i + 1];//要插入的数
  11. while (M >= 0)
  12. {
  13. if (num < arr[M])//继续比较
  14. {
  15. arr[M + 1] = arr[M];//交换数值
  16. M--;
  17. }
  18. else
  19. {
  20. break;
  21. }
  22. }
  23. arr[M + 1] = num;
  24. }
  25. }
  26. int main()
  27. {
  28. int arr[] = { 2,3,4,1,2,34,4,56,3,434,4 };
  29. int len = sizeof(arr) / 4;
  30. int i = 0;
  31. Compare(arr,len);
  32. for (i = 0; i < len; i++)
  33. {
  34. printf("%d ", arr[i]);
  35. }
  36. return 0;
  37. }

一、什么是直接插入排序

        就像玩扑克时相同,假设前n-1项是有序数列,现在将第n项插入其中,使得前n项有序。然后依次进行插入,直到将整个数列全部插入,排序完成。

        对于一组数据我们无法得知是否有序,但第一个元素只有一个,所以是有序的,所以将第一个元素作为第一个有序数列。后面的数值依次插入其中·。

二、代码讲解

void Compare(int arr[], int len)

首先创建一个插入排序的函数,需要传入数组和数据个数,因此创建int arr[],int len两个形参。

  1. void Compare(int arr[], int len)
  2. {
  3. int i = 0;
  4. for (i = 0; i < len-1; i++)//len减一因为要插入的数是i+1
  5. {
  6. int M = i;//记录有序列表最后应该元素下标
  7. int num = arr[i + 1];//要插入的数
  8. while (M >= 0)
  9. {
  10. if (num < arr[M])//继续比较
  11. {
  12. arr[M + 1] = arr[M];//交换数值
  13. M--;
  14. }
  15. else
  16. {
  17. break;
  18. }
  19. }
  20. arr[M + 1] = num;
  21. }
  22. }

因为插入排序是由前一个和后一个数据进行比较的,所以比较次数为(数据个数-1)。

  1. int M = i;//记录有序列表最后应该元素下标
  2. int num = arr[i + 1];//要插入的数

这里需要前后两个数据比较,且这两个需要比较的数据是变化的,所以创建表示两个数据的变量。

  1. while (M >= 0)
  2. {
  3. if (num < arr[M])//继续比较
  4. {
  5. arr[M + 1] = arr[M];//交换数值
  6. M--;
  7. }
  8. else
  9. {
  10. break;
  11. }
  12. }
  13. arr[M + 1] = num;

利用循环进行比较,如果后一个数比前一个数小,就交换位置(数值)。如果后一个数比前一个数更大,break跳出循环。

当每一次循环比较到最后一次时,需要将两个数进行最后的交换,因为之前只是将arr[M]的值赋给了arr[M+1],此时需要将arr[M+1]的值赋给arr[M]才算完成数值交换,否则会出现比较数据丢失和重复的问题。此时的M--了的,所以需要M+1得到所需要的数据下标进行交换。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/277985
推荐阅读
相关标签
  

闽ICP备14008679号