如何实现bubble sort(冒泡排序)按字符串长度从大到小排序
按字符串长度从大到小的冒泡排序实现
你现有的代码逻辑实际是选择排序,不是冒泡排序:选择排序的核心是每轮遍历未排序区间找到最值,直接交换到排序区间的末尾;冒泡排序则是相邻元素两两比较,每轮把最值逐步“冒泡”到区间边缘。
如果你需要标准冒泡排序的实现,按字符串长度从大到小排序,参考代码如下:
function bubbleSortByLengthDesc(array) { for (let i = 0; i < array.length - 1; i++) { let hasSwap = false; // 每轮排序后末尾的i个元素已经是有序的最短元素,不需要再比较 for (let j = 0; j < array.length - 1 - i; j++) { // 前一个元素长度小于后一个就交换,保证更长的元素往前移 if (array[j].length < array[j + 1].length) { // 解构赋值交换,不需要额外临时变量 [array[j], array[j + 1]] = [array[j + 1], array[j]]; hasSwap = true; } } // 本轮没有交换说明数组已经完全有序,直接退出 if (!hasSwap) break; } return array; }
关于你现有代码的问题:你目前的选择排序写法里的判断条件array[i].length < array[j].length本身是可以实现从大到小排序的,如果你运行得到从小到大的结果,说明你实际写代码时把比较运算符写成了>,改回<即可得到预期结果。
如果要调整为从小到大排序,把上述所有代码里的比较符号换成>即可。
内容的提问来源于stack exchange,提问作者Shneebnee1
相关产品推荐
相关产品推荐

