Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3287
  • 博文数量: 1
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2020-06-19 21:16
文章分类
文章存档

2020年(1)

我的朋友
最近访客

分类: C/C++

2020-06-19 22:06:29

适用场景: 数组基本有序,排序时可节约大量时间

排序思路: 默认数组有序,新加入的数找到自己合适的位置插入。 如果新数字基本有序,一次数组遍历即可完成排序。顺序数组排序时间复杂度为O(n), 逆序时间复杂度则退化为O(n^2).

C语言代码如下:

点击(此处)折叠或打开

  1. void insertSort(int * arr, int len)
  2. {
  3.     int swap = 0;

  4.     if (NULL == arr)
  5.     {
  6.         return;
  7.     }

  8.     for (int i = 0; i < (len - 1); i ++)
  9.     {
  10.         //默认队列为有序队列,如果队列有序不用O(n)可排序完成
  11.         if (arr[i] > arr[i + 1])
  12.         {
  13.             swap = arr[i + 1];
  14.             arr[i + 1] = arr[i];
  15.             for (int j = i - 1; j >= 0; j --)
  16.             {
  17.                 if (swap < arr[j])
  18.                 {
  19.                     arr[j + 1] = arr[j];
  20.                 }
  21.                 else
  22.                 {
  23.                     break;
  24.                 }
  25.             }

  26.             if (0 > j)
  27.             {
  28.                 j = 0;
  29.             }

  30.             arr[j] = swap;
  31.         }
  32.     }
  33. }

如果该函数既要能完成正序,也能完成逆序,则增加一个比较函数指针作为参数输入。

点击(此处)折叠或打开

  1. void insertSort(int * arr, int len, int (*cmp)(int, int))
  2. {
  3.     int swap = 0;

  4.     if (NULL == arr)
  5.     {
  6.         return;
  7.     }

  8.     for (int i = 0; i < (len - 1); i ++)
  9.     {
  10.         //默认队列为有序队列,如果队列有序不用O(n)可排序完成
  11.         if (cmp(arr[i], arr[i + 1]) > 0)
  12.         {
  13.             swap = arr[i + 1];
  14.             arr[i + 1] = arr[i];
  15.             for (int j = i - 1; j >= 0; j --)
  16.             {
  17.                 if (swap < arr[j])
  18.                 {
  19.                     arr[j + 1] = arr[j];
  20.                 }
  21.                 else
  22.                 {
  23.                     break;
  24.                 }
  25.             }

  26.             if (0 > j)
  27.             {
  28.                 j = 0;
  29.             }

  30.             arr[j] = swap;
  31.         }
  32.     }
  33. }


阅读(849) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~