Voyz's Studio.

几种排序算法的JS实现

字数统计: 366阅读时长: 2 min
2018/08/01 Share
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
// 冒泡排序
function bubbleSort(arr) {
truelet len = arr.length
truefor(var i = 0;i<len;i++) {
truetruefor(var j = 0;j<len-1-i;j++) {
truetruetrueif (arr[j]>arr[j+1]) {
truetruetruetrue[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
truetruetrue}
truetrue}
true}
truereturn arr
}

// 选择排序
function selectSort(arr) {
truelet len = arr.length
truefor (var i = 0; i < len; i++) {
truetruevar index = i;
truetruefor (var j = i+1;j < len;j++){
truetruetrueif (arr[j]<arr[index]) index = j;
truetrue}
truetrueif (index != i) [arr[index],arr[i]] = [arr[i],arr[index]]
true}
truereturn arr
}

// 插入排序
function insertSort(arr) {
truelet len = arr.length;
truefor (var i = 1; i < len; i++) {
truetruevar temp = arr[i],j = i-1;
truetruewhile(j>=0&&arr[j]<temp){
truetruetruearr[j+1] = arr[j];
truetruetruej--;
truetrue}
truetruearr[j+1] = temp;
true}
truereturn arr;
}

// 快速排序
function quickSort(arr,start,end) {
trueif (start<end) {
truetruevar mid = Math.floor((start+end)/2)
truetruevar base = arr[mid];
truetruevar i = start,j = end;
truetruedo {
truetruetruewhile(arr[i]<base&&i<end){
truetruetruetruei++;
truetruetrue}
truetruetruewhile(arr[j]>base&&j>start){
truetruetruetruej--;
truetruetrue}
truetruetrueif (i<=j) {
truetruetruetrue[arr[i],arr[j]] = [arr[j],arr[i]];
truetruetruetruei++;
truetruetruetruej--;
truetruetrue}
truetrue}while(i<=j) {
truetruetrueif (start<j) quickSort(arr,start,j);
truetruetrueif (i<end) quickSort(arr,i,end);
truetrue}
truetruereturn arr;

true}
}

// 希尔排序
function shellSort(arr) {
truevar len = arr.length;
truevar gap = Math.floor(len/2);
truewhile(gap>0) {
truetruefor (var i = gap;i<len;i++) {
truetruetruefor (var j = i;j>0;j-=gap){
truetruetruetrueif (arr[j-gap]>arr[j]) {
truetruetruetruetrue[arr[j-gap], arr[j]] = [arr[j],arr[j-gap]]
truetruetruetrue}else{
truetruetruetruetruebreak;
truetruetruetrue}
truetruetrue}
truetrue}
truetruegap = Math.floor(gap/2);
true}
truereturn arr;
}
CATALOG