对该数组从小到大进行排序
1.冒泡排序
从第一位开始,相邻的两个数进行比较。如果前面的数比后面的数大,则两个数交换位置。排序的过程如下图所示。
排序的次数为nums.length-1。
第一次排序确定整个数组最后一位,比较了nums.length-1次;
第二次排序是在第一位到倒数第二位的数中确定最后一位,即确定整个数组倒数第二位,比较了nums.length-2次
以此类推,最后一次排序是在第一位到第二位中确定最后一位,即确定整个数组的第二位,比较了1次。
这就是冒泡排序的过程,用代码展示这个过程如下图。
可以发现,每次都是for循环的条件表达式有规律的发生改变,优化一下代码后,冒泡排序的代码如下
2.选择排序
选择排序与冒泡排序非常相似,冒泡排序是把大的数放在后面,从最后一位往前排序。
选择排序是将小的数放在前面,从第一位开始往后排序。排序的过程如下图。
排序的次数为nums.length-1。
第一次排序确定整个数组第一位,比较了nums.length-1次;
第二次排序是在第二位到最后一位的数中确定第一位,即确定整个数组第二位,比较了nums.length-2次
以此类推,最后一次排序是在倒数第二位到最后一位中确定第一位,即确定整个数组的倒数第二位,比较了1次。
这就是选择排序的过程,用代码展示这个过程如下图。
可以发现,每次都是for循环的单次表达式和if里面用来确定位数的索引有规律的发生改变,优化一下代码后,选择排序的代码如下
for(j=1; j<nums.length; j++){ for(var i=j; i<nums.length; i++){ if(nums[j-1]>nums[i]){ var temp = nums[j-1]; nums[j-1] = nums[i]; nums[i] = temp; } } console.log(nums); }
3.插入排序
将整个数组分成有序和无序的两部分,把无序部分的部分依次插入到有序的部分中。
这个过程类似于斗地主摸牌,首先摸到第一张牌,把第一张牌作为有序部分,而还在牌堆里的牌作为无序部分。
然后摸第二张牌,跟有序部分做比较并插入,第一张牌和第二种牌组成新的有序部分。
依次类推,有序部分不断扩大,无效部分不断减少直至没有,排序的过程如下图。
排序的次数为nums.length-1。
第一次排序将第二位插入有序部分,前两位变成有序部分。第二次排序将第三位插入有序部分,前三位变成有序部分。
以此类推,最后一次排序是将最后一位插入有序部分,整体排好了序。
这就是插入排序的过程,用代码展示这个过程如下图。
可以发现,每次都是for循环的单次表达式有规律的发生改变,优化一下代码后,插入排序的代码如下
for(j=1; j<nums.length; j++){ for(i=j; i>0; i--){ if(nums[i-1]>nums[i]) exchange(i-1,i); else break; } console.log(nums); }