排序:直接插入排序与希尔排序与哨兵的JavaScript实现(C语言版在文章末尾)

本文详细介绍了两种常见的排序算法——直接插入排序和希尔排序,并提供了JavaScript语言实现的代码示例。通过对比两种算法的不同之处,帮助读者理解排序算法的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用了JavaScript语言,可直接按f12,在浏览器控制台运行

直接插入排序:

function insertionSort(arr) {

  for (let i = 1; i < arr.length; i++) { //在arr[0,...,i-1]中插入arr[i]
    const toInsertValue = arr[i];/*比较目标*/
    let j;
    for (j = i-1; j >=0 && arr[j] > toInsertValue; j--) {/*j-1到0比较*/ 
      arr[j+1] = arr[j];
    }
    arr[j+1] = toInsertValue;
    //arr[j] = toInsertValue;一个符号能够将一个程序全弄错
    //内循环结束得到的arr[j-1]是第一个比arr[i]小的值,那么就把arr[i]存储在此处的arr[j]上。而之前的arr[j]已经在上一轮循环中存储到了arr[j+1]中
    
  }
}
var a=[1111,102,44,33];insertionSort(a);console.log(a)

希尔排序:(跨间隔比较)

希尔排序和直接插入排序一样,只不过是将1换成了d

shell 以531增量为例,算法是 达成增量有序的 使得序列基本有序 以插入

function shell_pass(arr) {
  var d=5;
  for (let i = d; i < arr.length; i++) { //在arr[0,...,i-1]中插入arr[d]
    const toInsertValue = arr[i];
    let j;/* */
    for (j = i-d; j >0 && arr[j] > toInsertValue; j-=d) {/*j-1到0比较*/ 
      arr[j+d] = arr[j];
    }
    arr[j+d] = toInsertValue;
   //arr[j] < toInsertValue 前小于后,直接对后边的赋值
 
    
  }
}

var a=[9,13,8,2,5,13,7,1,15,11];
shell_pass(a);
console.log(a)

在这里插入图片描述

function shell_pass(arr,d) {
  for (let i = d; i < arr.length; i++) { //在arr[0,...,i-1]中插入arr[d]
    const toInsertValue = arr[i];/*插入目标-哨兵*/
    let j;/* */
    for (j = i-d; j >=0 && arr[j] > toInsertValue; j-=d) {/*j-1到0比较*/ 
      arr[j+d] = arr[j];
    }
    arr[j+d] = toInsertValue;
   //arr[j] < toInsertValue 前小于后,直接对后边的赋值
 
    
  }
}
var d=[5,3,1];/*增量序列*/
var a=[9,13,8,2,5,13,7,1,15,11];shell_pass(a,d[2]);console.log(a);shell_pass(a,d[1]);console.log(a);

哨兵a[0]:

引入哨兵的好处:
不需要增加额外空间,保存当前待插入记录(不会因记录的后移而被占用)。
可以保证在内循环的由后向前的移动中,总可以在超出循环边界前找到一个等于当前的记录,起**“哨兵”**监视作用

function insertionSort(arr) {

  for (let i = 2; i <arr.length; i++) { //在arr[1,...,i-1]中插入arr[i]
    arr[0] = arr[i];/*设置哨兵*/
    let j;
    for (j = i-1;  arr[j] > arr[0]; j--) {
      arr[j+1] = arr[j];
    }
    arr[j+1] = arr[0];   
  }
}

var a=[0,1111,102,44,33];
insertionSort(a);
console.log(a)

在这里插入图片描述


直接插入排序C语言版(希尔排序将1换成参数即可):

void insertionSort(int arr[]){

	for(int j=1;j<4;j++){
	int temp=arr[j];
	  for(int k=j-1;k>=0;k--){
		  if(arr[k]>temp)arr[k+1]=arr[k];  
		  else{arr[k+1]=temp; break;}
	  }
	 
	}

	printf("加油");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值