今天学习了冒泡排序和快速排序,阅读的是《啊哈!算法》。作者是用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