【笔记】菜鸟学算法(—)
插入排序通过不断与前一个数比较,交换位置来完成排序
一组数据,sum{1,5,3,7,2},先拿出数字5,和第一个数字1比较,5比1大,位置不变;
拿出数字3,和前一个数字5比较,3比5小,将3和5交换位置,接着和前一个数字比较,3比1大,
位置不变;拿出数字7,7比5大,位置不变;拿出数字2,2比7小,交换位置,接着和前一个数字
5比较,2比5小,交换位置,接着和前一位数字3比较,2比3小,交换位置,接着和前一个数1比较
2比1大,位置不变,排序结束,sum{1,2,3,5,7}.
1,5,3,7,2 --> 1,5,3,7,2 --> 1,3,5,7,2 --> 1,3,5,7,2 --> 1,3,5,2,7 --> 1,3,2,5,7-->
1,2,3,5,7
for (int j = 1; j <5; j++) //5是数组的长度
{
key = sum; //拿出后一个数
m = j - 1; //定位到前一个数
while(m>0&&sum > key)//判断是否挨个比较完
{
sum = sum;//将前一个数给后一个数
m = m - 1; //定位到前一位的前一位数
sum = key; //将后一位数给前一位
}
}
另一个说法是冒泡算法 插入排序可以理解为:
左边为已排序完了的。。。从右边开始取数和他左边的比,当比要取出的数大时,就往右边移动一个位置,再比较,直到找到比他小的值,再插在这个比他小的值的右边。
其实我觉得在写的时候,有几个要点要注意:
一个就是,一开始取左边第一个为已排序完的,因为是一个,所以也算排序完的了。
一个是拿来比较的值是从第二个开始来比的,下标是1开始的。。
这两个我倒是经常弄忘。。。 5个成员,比较7次才排序完成。不应该是几个成员就比较几次就能排序完成的么?? 因为接触算法不多,之前听过还有自己用过的就冒泡排序,这个应该也算是冒泡排序的一种吧??? 感觉稍微改一下就是插入排序了
页:
[1]