【JS小白】学习冒泡排序、选排排序、插入排序

本文都以升序为例。

冒泡排序

左右交换,每回合排好一个最大的。

伪代码:

i是回合的计数,从0开始计数。
j和j+1是每次比较并可能交换的两个位置。

(arr):
i:[0,n-1)
	j:[0,n-1-i)
		if [j]>[j+1]
			swap(j,j+1)

i也可以直接表示每一回合将会排好顺序的位置。

(arr):
	i:[n-1,0)
		j:[0,i)
			if( [j] > [j+1])
				swap(j,j+1)

JS代码测试

function bubbleSort_1(arr){
    if(arr instanceof Array === false){
        return;
    }

    for(let i = 0; i < arr.length - 1; i++){
        for(let j = 0; j < arr.length - 1 - i; j++){
            if(arr[j] > arr[j+1]){
                swap(arr, j, j+1);
            }
        }
    }
    return arr;
}

function swap(arr, i, j){
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

function bubbleSort_2(arr){
    for(let i = arr.length - 1; i > 0; i--){
        for(let j=0; j < i; j++){
            if(arr[j] > arr[j+1]){
                swap(arr, j, j+1);
            }
        }
    }
    return arr;
}

console.log(bubbleSort_1([1,5,8,3,7,3,0,4,-3,-6]));
console.log(bubbleSort_2([1,5,8,3,7,3,0,4,-3,-6]));

选择排序

每一回合选择一个最小的元素,然后放到最左边。

也可以选最大的,放到右边,但下面以选择最小的为例。

伪代码:

i表示该回合将会被排好顺序的位置

i:[0,n-1)
	minIndex=i
	j:[i+1,n)
		if([j]<[minIndex])
			minIndex=j
			
	swap(minIndex,i)

JS代码测试

function selectSort(arr){
    let n=arr.length;
    for(let i=0; i<n-1;i++){
        let minIndex=i;
        for(let j=i+1;j<n;j++){
            if(arr[j]<arr[minIndex]){
                minIndex=j
            }
        }
        swap(arr,i,minIndex)
    }
    return arr
}

function swap(arr, i, j){
    var temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

console.log(selectSort([1,5,8,3,7,3,0,4,-3,-6]));

插入排序

往有序的列表中插入元素。

对于数组,刚开始第0个元素时有序的,然后将第1个插入,这样0、1就是有序的,然后插入第2个元素,这样0、1、2都是有序的...

i表示当前回合被插入的元素,在i前面的都是有序的。
从0开始的话,其前面的有序列表是空的,数据不会有交换。所以从位置1开始即可。
伪代码:

i:[1,n)
	preIndex=i-1
	cur=[i]
	while (preIndex>-1 && [preIndex]>cur):
		[preIndex+1]=[preIndex]
		preIndex--
	[preIndex+1]=cur

JS代码测试

function insertSort(arr){
    let n = arr.length;
    for(let i=1;i<n;i++){
        let preIndex=i-1;
        let cur = arr[i]
        while(preIndex>-1 && arr[preIndex]>cur){
            arr[preIndex+1]=arr[preIndex]
            preIndex--
        }

        arr[preIndex+1]=cur

    }
    return arr;
}


console.log(insertSort([1,5,8,3,7,3,0,4,-3,-6]));

posted @ 2022-06-09 09:32  greencode  阅读(41)  评论(0编辑  收藏  举报