对该数组从小到大进行排序

排序算法-简单排序_数组


1.冒泡排序

从第一位开始,相邻的两个数进行比较。如果前面的数比后面的数大,则两个数交换位置。排序的过程如下图所示。

排序算法-简单排序_选择排序_02

排序的次数为nums.length-1。

第一次排序确定整个数组最后一位,比较了nums.length-1次;

第二次排序是在第一位到倒数第二位的数中确定最后一位,即确定整个数组倒数第二位,比较了nums.length-2次

以此类推,最后一次排序是在第一位到第二位中确定最后一位,即确定整个数组的第二位,比较了1次。

这就是冒泡排序的过程,用代码展示这个过程如下图。

排序算法-简单排序_插入排序_03

排序算法-简单排序_选择排序_04

可以发现,每次都是for循环的条件表达式有规律的发生改变,优化一下代码后,冒泡排序的代码如下

   for(var j=nums.length-1; j>0; j--){
        for(var i=0; i<j; i++){
            if(nums[i]>nums[i+1]){  
                var temp = nums[i+1];
                nums[i+1] =nums[i];
                nums[i] = temp; 
            }
        }
        console.log(nums)
    }

排序算法-简单排序_冒泡排序_05


 2.选择排序

选择排序与冒泡排序非常相似,冒泡排序是把大的数放在后面,从最后一位往前排序。

选择排序是将小的数放在前面,从第一位开始往后排序。排序的过程如下图。

排序算法-简单排序_冒泡排序_06

排序的次数为nums.length-1。

第一次排序确定整个数组第一位,比较了nums.length-1次;

第二次排序是在第二位到最后一位的数中确定第一位,即确定整个数组第二位,比较了nums.length-2次

以此类推,最后一次排序是在倒数第二位到最后一位中确定第一位,即确定整个数组的倒数第二位,比较了1次。

这就是选择排序的过程,用代码展示这个过程如下图。

排序算法-简单排序_二次排序_07

 排序算法-简单排序_冒泡排序_08

可以发现,每次都是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);
}

排序算法-简单排序_选择排序_09


 3.插入排序

将整个数组分成有序和无序的两部分,把无序部分的部分依次插入到有序的部分中。

这个过程类似于斗地主摸牌,首先摸到第一张牌,把第一张牌作为有序部分,而还在牌堆里的牌作为无序部分。

然后摸第二张牌,跟有序部分做比较并插入,第一张牌和第二种牌组成新的有序部分。

依次类推,有序部分不断扩大,无效部分不断减少直至没有,排序的过程如下图。

排序算法-简单排序_数组_10

排序的次数为nums.length-1。

第一次排序将第二位插入有序部分,前两位变成有序部分。第二次排序将第三位插入有序部分,前三位变成有序部分。

以此类推,最后一次排序是将最后一位插入有序部分,整体排好了序。

这就是插入排序的过程,用代码展示这个过程如下图。

排序算法-简单排序_选择排序_11

 

 排序算法-简单排序_数组_12

可以发现,每次都是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);
}

排序算法-简单排序_冒泡排序_13