开始学习的时候就会排序算法了。但是过了一段时间就忘记了。这几天我我又哪里练习一下好像是忘记了一样,
今天在次写一下我的心得、个人理解,新手,可喷,你的改进便是我前进的动力。
排序: 选择排序算法的思路是,默认第一个数就是最大(最小)的,然后第二个for语句就是找打比这个数还要大(要小)最后交换他们他和我们默认之间
的值就好了。
/*选择排序, 升序的代码*/
for (i = 0 ; i < len-1; i++)
for ( j = i+1; j < len; j++)
{
if(array [i] > array [j])
{
tem = array [i];
array [i] = array [j];
array [j] = tem;
}
}
冒泡排序算法思路是:
这是第一个for 语句的功能。
假如有6个数,第1个和第2个比较。把最大的数存到第2数当中,然后和第3个数比较,把最大的数存到
第 3个数当中, 同理,只用比较到第5个就可以了。因为第5个和第6个比较以后不就不用比较第6个了。
这是第一个for 语句的功能。
第二个for语句
就是比较了,其实我认为最重要的是弄清楚比较的次数,假如你都不知道比较的次数那么冒泡就基本就不能懂了。
还是以6个数为例,第一次就是把目的就是找到当中最大的数存到数组的最后面去,那就你自然就冒泡6-1次
当用第一个for 执行第二次的时候, 那就相当于我们把第二大的数只能存到数组的倒数第二项了。相当于只能
执行到
if ()语句就不多说了。看到代码自然就明白了。
依次类推,到循环结束
for ( i = 0; i < index -1; i++)
for ( j = 0; j < index - i -1; j++) // 为什么要是加index -i -1 呢、
{
if (array [j] > array [j+1]
{
tem = array [j];
array [j] = array [j+1];
array [j+1] = tem;
}
}
假如要对二维数组进行排序的话可根据 数组在内存开辟的地址是连续的原理, 可以把他转化成一维数组的思想去解决: