js实现八大排序

八大排序

这里的八大排序都是内部排序,即使用内存进行排序。
八大排序

1、插入排序——直接插入排序

(1)基本思想
a、先将待排序序列的第1个元素看成是一个有序的子序列;
b、从第2个元素开始,逐个将待排序的元素x与已排序序列[i-1] ~[0](从后往前)进行比较;
c、若x小于比较元素,则比较元素向后移动一位;否则,将x插入序列当前位置。

(2)演示示例
直接插入排序
(3)js实现

function insertSort(arr){
   
	//第一层循环:遍历待比较的数组元素
	for(let i = 1; i < arr.length; i++){
   
		let temp = arr[i];
		//第二层循环:将本轮带比较的元素与已经排序的元素相比较
		for(var j = i - 1; j >= 0 && arr[j] > temp; j--){
   
			arr[j + 1] = arr[j];
		}
		//将插入元素插入到正确位置
		arr[j + 1] = temp;
	}
	return arr;
}
console.log(insertSort([1,5,3,7,2,8])); //(8) [2, 3, 4, 5, 7, 7, 8, 10]

2、插入排序——希尔排序(最小增量排序)

(1)基本思想–直接插入排序的改进
a、先将要数组按某个增量d(n/2,n为要排序数的个数)分成若干组,所有距离为d的倍数的记录放在同一个组中;在各组内进行直接插入排序;
b、然后再用一个较小的增量(d/2)对它进行分组,每组再进行直接插入排序;直至增量减为1,进行直接插入排序后,整体排序完成。

(2)演示示例
希尔排序
(3)js实现
需要三层循环遍历

function shellSort(arr){
   
    let n = arr.length,
        d = n;
    //第一层循环:分割增量d
    while(d > 1){
   
        d = Math.floor(d/2);
        //下面;两层循环是直接插入排
        for(var i = d; i < n; i++){
   
            //记录待比较的元素
            var temp = arr[i]; 
            for(var j = i - d; j >= 0 && arr[j] > temp; j = j -d){
   
                arr[j + d] = arr[j];
            }
            arr[j + d] = temp;
        }
    }
    return arr;
}
console.log(shellSort([1,5,3,7,2,8]));

3、选择排序——简单选择排序

(1)基本思想——比较+交换
每次遍历找到待排序元素中的最小值,将最小值和待排序的第一个元素交换,直至排序结束。

(2)演示示例
简单选择排序
(3)js实现

function directSelectSort(arr){
   
    let minIndex, temp;
    for(var i = 0; i < arr.length; i++){
   
        minIndex = i;
        //找到最小的值
        for(var j = i + 1; j < arr.length; j++){
   
            if(arr[j] < arr[minIndex]){
   
                minIndex = j;
            }
        }
        //将最小的值与未排序的第一个元素进行交换
        temp = arr[i
  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值