博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法导论之——插入排序
阅读量:6895 次
发布时间:2019-06-27

本文共 1070 字,大约阅读时间需要 3 分钟。

#include
/*我们希望排序的数也称为关键字*/void sort_on(void);void sort_down(void);int A[6] = { 5,2,4,6,1,3 };int main(void){ //sort_down(); sort_on(); for (int num = 0; num<6; num++) printf("%d ", A[num]); return 0;}//升序void sort_on(void){ int key ; int i ; for (int j = 1; j<6; j++) { key = A[j];//得到我们需要排序的数,即关键字,这句有保存作用 i = j - 1;//记录当前要排序的数的前一个位置 while (i >= 0 && A[i]>key)//如果当前数大于要排序的数,则把大的数后移一个位置 { A[i + 1] = A[i]; i--; } A[i + 1] = key;//把保存的key移到指定位置 }}//降序void sort_down(void){ int key ; int i ; for (int j = 1; j<6; j++) { key = A[j]; i = j - 1; while (i >= 0 && A[i]

算法思路(以升序为例):

key=A[j];保存需要的比较值,while循环中,A[i]>key,当前key值的前一个值如果大于key值,就把A[i]的值后移一位,此时后移的位覆盖了key,然后i--,又循环重复,一直到循环结束,循环结束时,从小到大排列,但是此时由于之前i--的原因,跳出循环之后,要把第一步保存的key值给A[i+1];必须要是i+1。这样,保证了要排序的值在本次排序之后是从左到右依次变大的。

文字的分析还是不够直接,需要自己推导过程去理解。

在这之后,我们应该要知道这个数学交换比较过程怎么用算法去实现。

 在设计模式上存在缺陷,其实应该写成移植性更高的代码,试想要是我现在要排序100个元素的数组时,这个代码需要更改很多地方,但这次作为练手,就先这样了。以后注意改进。O(∩_∩)O

转载地址:http://zhzdl.baihongyu.com/

你可能感兴趣的文章
linux exec 文件重定向
查看>>
jquery mobile——必须引入的文件及头信息
查看>>
mysql 主从配置详解
查看>>
Redis安装部署
查看>>
redis-sentinel 做HA
查看>>
图为先C++笔试20131017
查看>>
perl多线程
查看>>
android开发中用到的颜色
查看>>
php 位移运算符(&,|,^,~)
查看>>
180626-Spring之借助Redis设计一个简单访问计数器
查看>>
Thread Communication
查看>>
模仿墨迹天气-demo
查看>>
批量修改表引擎
查看>>
mysql基于日志点的复制步骤
查看>>
查看centos中的用户和用户组
查看>>
Elixir ABC 1
查看>>
ZeroSpeech
查看>>
Fiddler 调试手机应用
查看>>
spring 3.2 mvc 点击修改按钮时<form:checkbox/>使原来选中的前面画勾
查看>>
常用的正则表达式
查看>>