1- const os = require ( 'os' ) ;
2-
3- module . exports = function ( sort ) {
4- console . log ( os . EOL + "排序名称:" + sort . name ) ;
5-
6- const arr = [ 12 , 3 , 10 , 11 , 1 ] ;
7- console . log ( arr ) ;
8- console . log ( '*' . repeat ( 20 ) + os . EOL ) ;
9-
10- console . log ( sort ( arr ) ) ;
11- } ;
1+ const os = require ( 'os' ) ;
2+ const bubbleSort = require ( './01.bubbleSort.js' ) ;
3+ const selectionSort = require ( './02.selectionSort.js' ) ;
4+ const insertionSort = require ( './03.insertionSort.js' ) ;
5+ const shellSort = require ( './04.shellSort.js' ) ;
6+
7+ const arrayLength = 10000 ;
8+ const testCount = 100 ;
9+
10+ function randomArray ( ) {
11+ const arr = [ ] ;
12+
13+ for ( let i = 0 ; i < arrayLength ; i ++ ) {
14+ arr . push ( Math . floor ( Math . random ( ) * 1000 ) ) ;
15+ }
16+
17+ return arr ;
18+ }
19+
20+ function getItemCounter ( arr ) {
21+ const map = new Map ( ) ;
22+
23+ arr . forEach ( item => {
24+ map . has ( item ) ? map . set ( item , map . get ( item ) + 1 ) : map . set ( item , 1 ) ;
25+ } ) ;
26+
27+ return map ;
28+ }
29+
30+ /**
31+ *
32+ *
33+ * @param {number[] } arr
34+ * @param {number[] } sortedArr
35+ */
36+ function check ( arr , sortedArr ) {
37+ for ( let i = 0 ; i < sortedArr . length - 1 ; i ++ ) {
38+ if ( sortedArr [ i ] > sortedArr [ i + 1 ] ) {
39+ throw new Error ( '升序排序错误' ) ;
40+ }
41+ }
42+
43+ const arrMap = getItemCounter ( arr ) ;
44+ const sortedArrMap = getItemCounter ( sortedArr ) ;
45+
46+ for ( let key of arrMap . keys ( ) ) {
47+ if ( sortedArrMap . get ( key ) === undefined
48+ || sortedArrMap . get ( key ) !== arrMap . get ( key ) ) {
49+ throw new Error ( '排序错误' ) ;
50+ }
51+ }
52+
53+ return true ;
54+ }
55+
56+ function test ( sort , toBeSortedArr ) {
57+ const innerSorted = toBeSortedArr . slice ( ) ;
58+
59+ const sortedArr = sort ( innerSorted . slice ( ) ) ;
60+ check ( innerSorted , sortedArr ) ;
61+
62+ const sTime = Date . now ( ) ;
63+ for ( let i = 0 ; i <= testCount ; i ++ ) {
64+ sort ( innerSorted . slice ( ) ) ;
65+ }
66+
67+ console . log ( `${ arrayLength } elements ${ testCount } times test ${ sort . name } cost ${ Date . now ( ) - sTime } ms` ) ;
68+ } ;
69+
70+ const toBeSortedArr = randomArray ( ) ;
71+ // test(bubbleSort, toBeSortedArr);
72+ test ( insertionSort , toBeSortedArr ) ;
73+ test ( shellSort , toBeSortedArr ) ;
0 commit comments