冒泡排序算法 JavaScript
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/7502489/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Bubble sort algorithm JavaScript
提问by kostas trichas
Please can you tell me what is wrong to this implementation of bubble sort algorithm in JavaScript?
请问你能告诉我这个冒泡排序算法在 JavaScript 中的实现有什么问题吗?
for (var i=1; i<records.length; i++){
for (var j=records.length; j<1; j--){
if (parseInt(records[i-1]) < parseInt(records[i])){
var temp = records[i-1];
records[i-1] = records[i]
records[i] = temp;
}
}
}
回答by Ignatius Andrew
Couple of codes for bubble sort
冒泡排序的几个代码
bubblesort should not be used for larger arrays, can be used for smaller ones for its simplicity.
气泡排序不应该用于较大的数组,可以用于较小的数组,因为它很简单。
Optimized way, with all Checks
优化方式,所有检查
const bubble_Sort = (nums) => {
if(!Array.isArray(nums)) return -1; // --->if passed argument is not array
if(nums.length<2) return nums; // --->if array length is one or less
let swapped=false
temp=0,
count=-1,
arrLength=0;
do{
count ++;
swapped=false;
arrLength = (nums.length-1) - count; //---> not loop through sorted items
for(let i=0; i<=count; i++){
if(nums[i]>nums[i+1]){
temp=nums[i+1];
nums[i+1]=nums[i];
nums[i]=temp;
swapped=true;
}
}
}
while(swapped)
return nums;
}
console.log(bubble_Sort([3, 0, 2, 5, -1, 4, 1]));
Method 1
方法一
var a = [33, 103, 3, 726, 200, 984, 198, 764, 9];
function bubbleSort(a) {
var swapped;
do {
swapped = false;
for (var i=0; i < a.length-1; i++) {
if (a[i] > a[i+1]) {
var temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
swapped = true;
}
}
} while (swapped);
}
bubbleSort(a);
console.log(a);
Method 2
方法二
function bubbleSort(items) {
var length = items.length;
//Number of passes
for (var i = 0; i < length; i++) {
//Notice that j < (length - i)
for (var j = 0; j < (length - i - 1); j++) {
//Compare the adjacent positions
if(items[j] > items[j+1]) {
//Swap the numbers
var tmp = items[j]; //Temporary variable to hold the current number
items[j] = items[j+1]; //Replace current number with adjacent number
items[j+1] = tmp; //Replace adjacent number with current number
}
}
}
}
Method 3
方法三
function bubbleSort() {
var numElements = this.dataStore.length;
var temp;
for (var outer = numElements; outer >= 2; --outer) {
for (var inner = 0; inner <= outer-1; ++inner) {
if (this.dataStore[inner] > this.dataStore[inner+1]) {
swap(this.dataStore, inner, inner+1); }
}
console.log(this.toString());
}
}
回答by davbryn
for (var j=records.length; j<1; j--){
Shouldn't that be
不应该是
for (var j=records.length; j>1; j--){
回答by Collin
A simple implementation in ES6 JavaScript will be
ES6 JavaScript 中的一个简单实现将是
function BubbleSort(arr) {
const sortedArray = Array.from(arr);
let swap;
do {
swap = false;
for (let i = 1; i < sortedArray.length; ++i) {
if (sortedArray[i - 1] > sortedArray[i]) {
[sortedArray[i], sortedArray[i - 1]] = [sortedArray[i - 1], sortedArray[i]];
swap = true;
}
}
} while (swap)
return sortedArray;
}
console.log(BubbleSort([3, 12, 9, 5]));
回答by Mansuro
you should use j instead of i in the second loop, and don't forget to change the j<1 to j>1
您应该在第二个循环中使用 j 而不是 i,并且不要忘记将 j<1 更改为 j>1
回答by James
I believe that in a bubble sort, once the i loop has completed an iteration, then the i'th element is now in its correct position. That means that you should write the j loop as
我相信在冒泡排序中,一旦 i 循环完成迭代,那么第 i 个元素现在处于正确位置。这意味着您应该将 j 循环编写为
for (var j = i + 1; j < records.length; j++)
Otherwise your bubble sort will be (even more) inefficient.
否则,您的冒泡排序将(甚至更多)效率低下。
回答by Andrej Kaurin
My solution:
我的解决方案:
function bubbleSort(A){
var swapped,
len = arr.length;
if(len === 1) return;
do {
swapped = false;
for(var i=1;i<len;i++) {
if(A[i-1] > A[i]) {
var b = A[i];
A[i] = A[i-1];
A[i-1] = b;
swapped = true;
}
}
}
while(swapped)
}
var arr = [1, 6, 9, 5, 3, 4, 2, 12, 4567, 5, 34];
bubbleSort(arr);
document.write(arr);
回答by Ujjwal Manandhar
the second for
loop is coded wrong it should be
第二个for
循环编码错误,应该是
for (var i=0; i<records.length; i++){
for (var j=0; j<records.length; j++){
if (parseInt(records[i]) > parseInt(records[j])){
var temp = records[i];
records[i] = records[j];
records[j] = temp;
}
}
}