[原创] 简谈算法之插入排序

michael_llh   2016-10-11 20:19 楼主
我们在面试互联网企业的软件开发岗位的时候,必不可少的会考到算法和数据结构的知识,而且这部分的内容也是我们在大学课程里面会学习到的内容,当然是指相关专业。那么我们在这里很大家一起分享相关的软件算法类的知识,因为自己也是边学习边总结,如果有什么不对或者需要大家补充的希望我们可以多多讨论,完善内容,能够帮助都后面有需要学习这一块内容的同学。
今天我们来聊一聊排序算法当中的一个例子,选择排序,选择排序是比较好理解的一个排序方法,属于简单类型的,我们具体看下算法的实现内容。
我们先通过语言描述一下整个过程:
首先呢,从一个数组中找到最小的元素然后将其和第一个元素交换,这样实现第一个元素是最小的,然后第二次就是找出次小的元素和第二个元素交换,依次进行,直到交换到最后一个元素,整个排序过程完成。
这个应该是比较好理解的,我们就不画图了,我们可以直接通过代码当中进行解释如何实现的。
相信注释已经非常清楚了,所以这里就不在进行文字说明了哈。
  1. #include <stdio.h>
  2. // 类型重定义
  3. typedef int Item;
  4. // 宏定义了一个key
  5. #define key(A) (A)
  6. // 宏定义一个大小判断的宏
  7. #define less(A, B) (key(A) < key(B))
  8. // 交换两个数值大小的宏
  9. #define exch(A, B) {Item t = A; A = B; B = t;}
  10. // 判断大小,并进行交换的宏,
  11. // 如果A大于B,两者进行交换
  12. #define compexch(A, B) if(less(B, A)) exch(A, B)
  13. // 选择排序实现,输入一个数组和数组长度
  14. void choice_selection(Item a[], int length){
  15. int i , j; // 定义两个临时变量
  16. for(i = 0; i < length; i++ ){
  17. int min = i; // 首先把数组的第一个数值认为是最小的
  18. // 遍历剩下的所有元素,找到最小的那个,交换下标
  19. for(j = i+1; j < length; j++){
  20. // 如果a[j]小于a[min],则下标赋值为j
  21. if(less(a[j],a[min])) min = j;
  22. }
  23. // 最后是交换两个数值,我们找到的那个最小的数值和第i个数值交换
  24. exch(a[i], a[min]);
  25. }
  26. }
本帖最后由 michael_llh 于 2016-10-11 20:20 编辑

回复评论 (7)

请问有没有很快的排序算法,,您对现有快速排序算法有没有什么改进的建议,或者说应该可能从哪些方面改进,,谢谢,,我才刚开始看排序,想用快速排序结合实际去使他更快,,就是没有方向
点赞  2016-10-12 00:43
你可以看看这个博客  八大排序算法  http://blog.csdn.net/hguisu/article/details/7776068
点赞  2016-10-12 13:08
引用: huangweichi123 发表于 2016-10-12 00:43
请问有没有很快的排序算法,,您对现有快速排序算法有没有什么改进的建议,或者说应该可能从哪些方面改进, ...

快速排序是比较好的,但是具体如何实际应用我也不是特别懂
点赞  2016-10-12 15:27
引用: shuolang 发表于 2016-10-12 13:08
你可以看看这个博客  八大排序算法  http://blog.csdn.net/hguisu/article/details/7776068

打不开
点赞  2016-10-12 15:34
引用: shuolang 发表于 2016-10-12 13:08
你可以看看这个博客  八大排序算法  http://blog.csdn.net/hguisu/article/details/7776068

好的,,谢谢,,
点赞  2016-10-12 16:35
引用: michael_llh 发表于 2016-10-12 15:27
快速排序是比较好的,但是具体如何实际应用我也不是特别懂

好的,,有问题再请教您
点赞  2016-10-12 16:35
引用: huangweichi123 发表于 2016-10-12 16:35
好的,,有问题再请教您

恩恩,多多交流
点赞  2016-10-13 21:14
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复