数据结构与算法学习笔记 (12)--排序算法之直接插入排序

举报
王建峰 发表于 2021/11/19 03:55:29 2021/11/19
【摘要】 排序(Sort) 排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。 排序的目的是方便我们队数据查询记录、修改记录等操作。   排序的分类 按稳定性可分为稳定排序和非稳定排序,按待排序数据的存储位置又可分为内排序和外排序。 截止目前,各种内排序方法可归纳为以下五类: (1)插入排序 (2)交换排序 ...

排序(Sort)

排序(Sort)是将无序的记录序列(或称文件)调整成有序的序列。

排序的目的是方便我们队数据查询记录、修改记录等操作。

 

排序的分类

按稳定性可分为稳定排序和非稳定排序,按待排序数据的存储位置又可分为内排序和外排序。


截止目前,各种内排序方法可归纳为以下五类:
(1)插入排序
(2)交换排序
(3)选择排序
(4)归并排序
(5)基数排序。

本次介绍的是简单常用的排序算法,直接插入排序属于内排序算法!

 

直接插入算法  

时间复杂度: T(n)=O(n2)

算法思路:排序过程中,数据序列分成已排序和待排序两个部分,将待排序中的数据元素和各个已排序的数据逐一比较。如果从数据大的一端开始比较的话,数据元素小于序列中的元素,则将序列中的部分元素偏移,产生一个空位,再比较下一个序列元素;数据元素大于序列中的元素,则插入填补空位。


  
  1. #include "stdio.h"
  2. void insert_sort(int data[], int len); //直接插入排序
  3. void insert_show(int data[], int len); //显示
  4. void insert_sort(int data[], int len)
  5. {
  6. int i,j,temp;
  7. for (i = 1;i < len;i++)
  8. {
  9. temp = data[i]; //设定待插入值
  10. for (j = i-1;j >= 0;j--)
  11. {
  12. if (temp < data[j])
  13. {
  14. data[j+1] = data[j]; //元素→移动
  15. }
  16. else
  17. {
  18. break;
  19. }
  20. }
  21. data[j+1] = temp; //填补空位
  22. insert_show(data, len);
  23. }
  24. }
  25. void insert_show(int data[], int len)
  26. {
  27. int i;
  28. for (i = 0;i < len;i++)
  29. {
  30. printf("%d,",data[i]);
  31. }
  32. printf("\n");
  33. }
  34. int main(void)
  35. {
  36. int data[] = {3, 2, 1, 4, 7};
  37. int len = sizeof(data)/sizeof(int);
  38. insert_show(data, len);
  39. insert_sort(data, len);
  40. }

排序过程

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/81196763

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。