用javascript写排序算法

今天学习了冒泡排序和快速排序,阅读的是《啊哈!算法》。作者是用C语言描述的算法。看完之后,我用javascript敲了一遍。结果如下:

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function sort(myNum){
var temp = 0;
var flag = 0;
for(var i=0;i<myNum.length-1;i++){
var flag = 0;
for(var j=0;j<myNum.length-i;j++){
if(myNum[j]>myNum[j+1]){
flag = 1;
var temp = myNum[j];
myNum[j] = myNum[j+1];
myNum[j+1] = temp;
}
}
if(flag == 0){
break;
}
}
}

冒泡排序的基本思想就是,每次比较两个相邻的元素如果它们的顺序错了,那就把它们交换。我写的这个算法,加了一个标志位,用来在排序结果已经正确的情况下将结果返回,提高算法效率。

快速排序(快排)

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
function quickSort(array,left,right){
if(left>right){
return; //递归调用的返回条件
}
var temp = array[left];
var i = left;
var j = right;
var t = 0;
while(i!=j){
while(array[j]>=temp&&i<j){ //从右侧向左找比基准数小的数
j--;
}
while(array[i]<=temp&&i<j){ //从左向右找比基准数大的数
i++;
}
if(i<j){
t = array[i];
array[i] = array[j];
array[j] = t;
}
}
array[left] = array[i];
array[i] = temp;
quickSort(array,left,i-1); //递归调用
quickSort(array,i+1,right);
return array;
}

快速排序的基本思想是二分。每次找一个基准数,将数组分成两部分,基准数左边的部分全比基准数小,基准数右边的全比基准数大。然后再在这两部分里分别找基准数,然后再分。

完整的代码我已经放到了我的github上:
https://github.com/TimmyKingFree/algorithm

一个在减肥的蓝胖纸<br><br>阳光正能量小王子<br>…^_^…