JavaScript基础算法之选择排序

    技术2022-07-10  188

    排序思想:

    先假定数组中的第 0 个就是最小的数字的索引然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引知道数组遍历结束后,就能找到最小的那个索引,然后让最小的索引换到第 0 个的位置再来第二趟遍历,假定第 1 个是最小的数字的索引在遍历一次数组,找到比我小的那个数字的索引遍历结束后换个位置依次类推,也可以把数组排序好

    1、准备一个数组

    var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8]

    2、假定数组中的第 0 个是最小数字的索引

    var minIndex = 0

    3、遍历数组,判断,只要数字比我小,那么就替换掉原先记录的索引

    var minIndex = 0 for (var i = 0; i < arr.length; i++) { if (arr[i] < arr[minIndex]) { minIndex = i } } // 遍历结束后找到最小的索引 // 让第 minIndex 个和第 0 个交换 var temp = arr[minIndex] arr[minIndex] = arr[0] arr[0] = temp

    4、按照数组的长度重复执行上面的代码

    for (var j = 0; j < arr.length; j++) { // 因为第一遍的时候假定第 0 个,第二遍的时候假定第 1 个 // 所以我们要假定第 j 个就行 var minIndex = j // 因为之前已经把最小的放在最前面了,后面的循环就不需要判断前面的了 // 直接从 j + 1 开始 for (var i = j + 1; i < arr.length; i++) { if (arr[i] < arr[minIndex]) { minIndex = i } } // 遍历结束后找到最小的索引 // 第一趟的时候是和第 0 个交换,第二趟的时候是和第 1 个交换 // 我们直接和第 j 个交换就行 var temp = arr[minIndex] arr[minIndex] = arr[j] arr[j] = temp }

    5、和之前一样,倒数第二次排序完毕之后,就已经排好了,最后一次也没有必要了

    for (var j = 0; j < arr.length - 1; j++) { var minIndex = j for (var i = j + 1; i < arr.length; i++) { if (arr[i] < arr[minIndex]) { minIndex = i } } var temp = arr[minIndex] arr[minIndex] = arr[j] arr[j] = temp } 在交换变量之前,可以判断一下,如果我们遍历后得到的索引和当前的索引一样那么就证明当前这个就是目前最小的,那么就没有必要交换最后我们要判断,最小索引和当前索引不一样的时候,才交换 for (var j = 0; j < arr.length - 1; j++) { var minIndex = j for (var i = j + 1; i < arr.length; i++) { if (arr[i] < arr[minIndex]) { minIndex = i } } if (minIndex !== j) { var temp = arr[minIndex] arr[minIndex] = arr[j] arr[j] = temp } }

    6、至此,选择排序完成。

    Processed: 0.014, SQL: 9