functionSort(num) { this.totalNum = num this.dataStore = [] this.genData = functionsetData() { for (let i = 0; i < this.totalNum; ++i) { this.dataStore[i] = Math.floor(Math.random() * (this.totalNum + 1)) } }
this.quickSort = functionquickSort(data) { let len = data.length if (len <= 1) { return [...data] } let left = [] let right = [] let pivot = data[0] for (let i = 1; i < len; i++) { let item = data[i] if (item < pivot) { left.push(item) } else { right.push(item) } } returnthis.quickSort(left).concat(pivot, this.quickSort(right)) }
this.quickSort2 = functionquickSort2 (data) { let len = data.length if (len <= 1) { return [...data] } let left = [] let middle = [] let right = [] let pivotLeft = data[0] let pivotRight = data[len - 1] for (let i = 1; i < len; i++) { let item = data[i] if (item < pivotLeft) { left.push(item) } elseif (item > pivotRight) { right.push(item) } else { middle.push(item) } } returnthis.quickSort2(left).concat(pivotLeft, this.quickSort2(middle)).concat(pivotRight, this.quickSort2(right)) }
this.quickSort3 = functionquickSort3 (start, end) { if (start >= end) { return } let data = this.dataStore let i = start let j = end let pivot = data[i] while(i < j) { while(i < j && data[j] >= pivot) { j--; } data[i] = data[j] while(i < j && data[i] <= pivot) { i++; } data[j] = data[i] } data[i] = pivot this.quickSort3(start, i - 1) this.quickSort3(j + 1, end) }
this.quickSort4 = functionquickSort4 (start, end) { if (start >= end) { return } let data = this.dataStore let i = start let j = end let mid = Math.floor((end - start) / 2) let pivot = data[mid] data[mid] = data[i] data[i] = pivot while(i < j) { while(i < j && data[j] >= pivot) { j--; } data[i] = data[j] while(i < j && data[i] <= pivot) { i++; } data[j] = data[i] } data[i] = pivot this.quickSort4(start, i - 1) this.quickSort4(j + 1, end) }
this.genData()
let start = Date.now() this.quickSort4(0, this.totalNum - 1) let end = Date.now() console.log('quickSort4耗时: ' + (end - start) + '毫秒') }