挿入ソートアルゴリズムの実装(javascript言語)

<script type="text/javascript">
	
//插入排序算法(javascript)
//author:Hengda
//2020/1/25
//arr 待排序数组
//mode true 从大到小排列,false 从小到大排列
function insertionSort( arr, mode ){
    
    

	var i, j, temp, len = arr.length;//len为待排序数组长度 temp为交换变量 i j为控制变量。

	//从数组的第二个元素开始逐个往后处理。
	for( i = 1; i < len; i++ ){
    
    
		//将当前被处理元素值记录下来。
		temp = arr[ i ];
		//以下标倒序逐一比较当前元素位置之前的所有元素,如果比当前元素大,则逐一向后覆盖一个元素。
		for( j = i - 1; j >= 0 && ( mode ? arr[ j ] < temp : arr[ j ] > temp ); j-- ){
    
    
			arr[ j + 1 ] = arr[ j ];
		}
		//将点前被处理元素的值填入最终空缺的位置即 (j + 1) 注意这个 j 已经被for循环做了-1操作,所以这里需要+1。
		arr[ j + 1 ] = temp;
	}

	//遍历完成后,整个数组即为有序数组。
	return arr;
}


//以下为测试代码
//生成n的随机数组成的数组
//n为元素个数
function makeData( n ){
    
    
	var arr = [];
	var i = n;
	while( i-- ){
    
    
		arr.push( Math.floor( Math.random() * n ) );
	}
	return arr;
}

//生成 10万个数
arr = makeData( 10000 );
arrString = JSON.stringify( arr );

arr1 = JSON.parse( arrString );
console.log("原始数组:");
console.log( arr1 );
console.time( "插入排序-从小到大:" );
arr1 = insertionSort( arr1, false );
console.timeEnd( "插入排序-从小到大:" );
console.log( arr1 );

arr2 = JSON.parse( arrString );
//console.log( arr2 );
console.time( "插入排序-从大到小:" );
arr2 = insertionSort( arr2, true );
console.timeEnd( "插入排序-从大到小:" );
console.log( arr2 );
</script>

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/one312/article/details/113101588