JS排序算法:冒泡、选择、插入、归并、快速、希尔、堆、计数( 二 )

6. 选择排序算法实现(javascript)
//选择排序算法(javascript)//author:Hengda//arr数组//modefalse 升序 ture 降序function selectionSort( arr, mode ){//i,j为控制变量,miniMaxNo为标记发现的最大或者最小元素的下标,temp为交换变量,len为数组的长度var i, j, minMaxNo, temp, len = arr.length;//for( i = 0; i < len; i++ ){//当前位置初始为最小或最大数的位置minMaxNo = i;//遍历后续所有元素与minMaxNo对应的元素做比较,如果比minMaxNo大或者小,则更新minMaxNo的值为新元素的下标for( j = i; j < len; j++ ){if( mode ? arr[ j ] > arr[ minMaxNo ] : arr[ j ] < arr[ minMaxNo ] ){minMaxNo = j;}}//将最终确定的最大或者最小值与当前被处理位置i对应的元素值做交换temp = arr[ minMaxNo ];arr[ minMaxNo ] = arr[ i ];arr[ i ] = temp;}//排序完成return arr;}7. 希尔排序算法实现(javascript)
//希尔排序算法(javascript)//author:Hengda//arr数组 //modefalse 升序 ture 降序function shellSort( arr, mode ){//1,j,k为控制变量,gap为分组间隙初始化为1,temp用于交换数据,len数组的长度var i, j, k, gap = 1, temp, len = arr.length;//计算合适的分组元素间隙,这里计算得到gap的最大值,这里的5也可以是其他数,值不同,实际排序速度也不同while( gap< len / 5 ){gap = gap*5 + 1;}//开始排序while( gap > 0 ){//以下按分组排序,该排序原理为插入排序,如看不明白,可参考插入排序算法逻辑for( i = gap; i < len; i++ ){temp = arr[ i ];for( j = i - gap; j >= 0 && ( mode ? arr[ j ] < temp : arr[ j ] > temp ); j -= gap ){arr[ j + gap ] = arr[ j ];}arr[ j + gap ] = temp;}//缩小分组间隔值gap = Math.floor( gap / 5 );}return arr;}8. 快速排序算法实现(javascript)
//快速排序(javascript)//author:Hengda//arr数组//start 待排序数据段的起始下标(含)//end 待排序数据段终止下标(含) //mode false 升序 ture 降序function quickSort( arr, start, end, mode ){var i,j,temp;var divValue;if( start < end ){//初始化基准值baseValue = https://www.isolves.com/it/cxkf/yy/js/2021-02-07/arr[ end ];j = start;//遍历整段数据元素,小于等于基准值的放在基准准直左侧(正序),大于等于基准值的放在基准值左侧(倒序)for( i = start; i <= end ; i++ ){//与基准值作比较if( mode ? arr[ i ] >= baseValue : arr[ i ] <= baseValue ){//从左端开始依次排列放置,当前排列位置为$j,把原位置的元素向后交换temp = arr[ j ];arr[ j ] = arr[ i ];arr[ i ] = temp;//更新下一个应排列的位置j++;}}//循环中$j在最后的++操作并未使用,这里需要减去,使$j正确标记左右分界元素j--;//分界元素在两端是,则靠近分界元素的一端无需再排序//分界元素也无需再参与排序,因为左侧的一定小于等于分界元素,右侧的也一定大于等于分界元素//分别对分界元素左右两侧的数据段继续排序if( j > start ) quickSort( arr, start, j - 1, mode );if( j < end ) quickSort( arr, j + 1, end, mode );}return arr;}9. 测试排序1万个无序数,耗时如下
//测试排序10000个数testSort( 10000, false );``````javascriptjssort.html:388 正在生成 10000个无序数...jssort.html:392 生成 10000个无序数完成jssort.html:344 ---------jssort.html:346 快速排序:jssort.html:358 -正序耗时:: 22.447265625msjssort.html:372 -倒序耗时:: 7.83203125msjssort.html:344 ---------jssort.html:346 希尔排序:jssort.html:358 -正序耗时:: 7.2939453125msjssort.html:372 -倒序耗时:: 5.231689453125msjssort.html:344 ---------jssort.html:346 计数排序:jssort.html:358 -正序耗时:: 7.36083984375msjssort.html:372 -倒序耗时:: 7.77392578125msjssort.html:344 ---------jssort.html:346 插入排序:jssort.html:358 -正序耗时:: 9.529052734375msjssort.html:372 -倒序耗时:: 9.830078125msjssort.html:344 ---------jssort.html:346 堆排序:jssort.html:358 -正序耗时:: 8.35107421875msjssort.html:372 -倒序耗时:: 2.64990234375msjssort.html:344 ---------jssort.html:346 归并排序:jssort.html:358 -正序耗时:: 82.681884765625msjssort.html:372 -倒序耗时:: 114.632080078125msjssort.html:344 ---------jssort.html:346 选择排序:jssort.html:358 -正序耗时:: 96.762939453125msjssort.html:372 -倒序耗时:: 151.841064453125msjssort.html:344 ---------jssort.html:346 冒泡排序:jssort.html:358 -正序耗时:: 252.561767578125msjssort.html:372 -倒序耗时:: 289.15087890625ms10. 测试排序10万个无序数,耗时结果如下
//测试排序100000个数testSort( 100000, false );``````javascripttestSort(100000)jssort.html:386 ---------jssort.html:388 正在生成 100000个无序数...jssort.html:392 生成 100000个无序数完成jssort.html:344 ---------jssort.html:346 快速排序:jssort.html:358 -正序耗时:: 10.38818359375msjssort.html:372 -倒序耗时:: 11.48193359375msjssort.html:344 ---------jssort.html:346 希尔排序:jssort.html:358 -正序耗时:: 22.110107421875msjssort.html:372 -倒序耗时:: 19.762939453125msjssort.html:344 ---------jssort.html:346 计数排序:jssort.html:358 -正序耗时:: 17.098876953125msjssort.html:372 -倒序耗时:: 14.27294921875msjssort.html:344 ---------jssort.html:346 插入排序:jssort.html:358 -正序耗时:: 25.2509765625msjssort.html:372 -倒序耗时:: 27.105712890625msjssort.html:344 ---------jssort.html:346 堆排序:jssort.html:358 -正序耗时:: 24.9130859375msjssort.html:372 -倒序耗时:: 26.115966796875msjssort.html:344 ---------jssort.html:346 归并排序:jssort.html:358 -正序耗时:: 4676.212158203125msjssort.html:372 -倒序耗时:: 7991.64599609375msjssort.html:344 ---------jssort.html:346 选择排序:jssort.html:358 -正序耗时:: 5662.914794921875msjssort.html:372 -倒序耗时:: 12556.882080078125msjssort.html:344 ---------jssort.html:346 冒泡排序:jssort.html:358 -正序耗时:: 21762.098876953125msjssort.html:372 -倒序耗时:: 23281.131103515625ms


推荐阅读