四种排序算法(js)

今天整理一下我理解的四种排序算法,分别是:冒泡排序、选择排序、插入排序、和快速排序。除了快速排序让我有点蒙以外,其他三种排序自我感觉还是很好理解和书写的。

冒泡排序

从头进行两两对比,第一个跟第二个比较,如果前面的数比后面的大,那么就进行位置交换,之后第二个再跟第三个比较,以此类推。这个时候最后的一个数一定是数组里最大的数,一趟对比结束后,再循环这样的比较,最终完成从小到大排列。

function sort(arr){
    var temp;
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length - 1 - i; j ++) {
            if (arr[j] < arr[j + 1]) {
                continue;
            }else{
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
var arr = [5, 7, 4, 2, 9, 1, 8, 6, 3];
sort(arr);
console.log(arr);

跑了一下,没什么问题。刚开始学习JavaScript,有那里不规范的,可以改进的,可以随时告诉我,我也会虚心学习滴~

选择排序

每次都从剩下的数组里面选出最小的数进行有序的排列。

function sort(arr){
    var min,temp;
    for (var i = 0; i < arr.length - 1; i++) {
        min = i;
        for (var j = i +1; j < arr.length; j++) {
            if (arr[j] > arr[min]) {
                continue;   
            }
            min = j;
        }
        temp = arr[i];
        arr[i] = arr[min];
        arr[min] = temp;
    }
}
var arr = [5, 7, 2, 9, 1, 8, 6, 3];
sort(arr);
console.log(arr);

插入排序

插入排序就像抓牌打扑克一样,每次都从无须数组中拿出一个数,插入到有序数组里的适当位置以保持有序数组的有序。

function sort(arr){
    var temp;
    for (var i = 1; i < arr.length; i++) {
        for (var j = i - 1; j >= 0; j--) {
            if (arr[j + 1] > arr[j]){
                break;
            }
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
    }
}
var arr = [5, 7, 2, 9, 1, 8, 6, 3];
sort(arr);
console.log(arr);

快速排序

快速排序虽然叫快速,但是我觉得从费脑方面来说,一点也不快速(也可能是我智商不够)。让我来白话的解释一下我理解的快速排序,首先要选择一个数作为基点,我一般会选择第一个数,并且把这个位置记为i,然后让数组里剩下的数从最后一个数开始(把这个位置记为j)和这个基点进行比较,如果这个数大于基点,那么j– ,如果这个数小于基点,那么将两个数进行交换,然后不再从后往前看,而是从第一个数开始从前往后比较,这个时候就需要i++,然后同样的,如果这个数比基点数小,就i++,如果这个数比基点数大,就把数进行交换,并且更换方向j–,又从j开始从后往前进行比较,以此类推,知道i=j;这个时候基点左边的数都是小于基点的数,基点右边的数都是大于基点的数,这就把一个数组分成了两部分(也就是分区),再分别把这两个部分进行相同方法的进行分区,直到不能再进行分区,这个时候整个数组就已经排列完成了。

        function sort(arr, left, right){
            if (right - left > 0){
                var i = partSort(arr,left,right);
                sort(arr, left, i - 1);
                sort(arr, i + 1, right);
            }
        }
        function partSort(arr,left,right){
            var i = left, j = right,temp,t = i;
            while (i != j){

                if (t == i){
                    if (arr[j] > arr[i]){
                        j--;
                    }else{
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                        t = j;
                        i++;
                    }
                }else{
                    if (arr[i] < arr[j]){
                        i++;
                    }else{
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                        t = i;
                        j--;
                    }
                }
            }
            return i;
        }
        var arr = [5, 7, 2, 9, 1, 8, 6, 3];
        sort(arr, 0 , arr.length - 1);
        console.log(arr);

好了,四种排序的js代码都在这里了,都是按照我理解的来写的,希望看到的大神可以给我指导一下,或者是也在学习的朋友,希望能给你们一点启发。







moliy大人在哪儿,学霸就在哪儿~~~~


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在JavaScript中,冒泡排序是一种常见的排序算法。虽然冒泡排序的基本思想是相同的,但是可以通过一些优化来改进算法的性能和效率。下面我将介绍几种常见的改进型冒泡排序算法: 1. 基本冒泡排序算法:基本的冒泡排序算法通过比较相邻的两个元素,并根据需要交换它们的位置来排序数组。具体代码如下所示: 2. 改进的冒泡排序算法:在基本冒泡排序算法的基础上,我们可以添加一个标志位来标记是否发生了交换。如果在一趟排序中没有发生任何交换,说明数组已经有序,可以提前结束排序。这种改进可以减少比较次数,提高排序效率。 3. 鸡尾酒排序算法:鸡尾酒排序算法是对基本冒泡排序算法的一个改进。它从数组的两端开始同时进行排序,一端是最小的元素,另一端是最大的元素。每趟排序交替进行,先从左到右排序,再从右到左排序。这样可以减少排序的次数。 4. 递归冒泡排序算法:递归冒泡排序算法是一种通过递归实现的冒泡排序算法。它通过递归将数组分割为较小的部分,并分别对这些部分进行排序。然后再合并这些部分,最终得到排序好的数组。 5. 鸽巢排序算法:鸽巢排序算法是一种类似于计数排序的算法。它通过统计每个元素出现的次数,并根据次数生成一个新的数组来排序。这种算法适用于一定范围内的整数排序。 这里只列举了几种常见的改进型冒泡排序算法,实际上还有其他一些改进方法。根据具体的需求和场景,可以选择适合的排序算法来进行排序

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值