前一阵了解了一些常用的算法。试着用JavaScript写了一下。
1.JavaScript冒泡排序。 依次与相邻的元素对比,如果比后面的元素大,则交换位置。
function bubbleSort(arr){ var j,k,temp,len=arr.length,i=len-1,paook; while(i--){ paook = true; for (j = 0; j < len-1; j++) { k=j+1; temp = arr[j]; if(arr[k]<arr[j]){ arr[j] = arr[k]; arr[k] = temp; paook = false; } } if(paook == true){ break; } console.log(arr); } return arr; }
排序过程:
[8, 7, 6, 5, 4, 3, 2, 1, 0, 9]
[7, 6, 5, 4, 3, 2, 1, 0, 8, 9]
[6, 5, 4, 3, 2, 1, 0, 7, 8, 9]
[5, 4, 3, 2, 1, 0, 6, 7, 8, 9]
[4, 3, 2, 1, 0, 5, 6, 7, 8, 9]
[3, 2, 1, 0, 4, 5, 6, 7, 8, 9]
[2, 1, 0, 3, 4, 5, 6, 7, 8, 9]
[1, 0, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
像不像气泡冒出水面。。。
2.JavaScript选择排序。左边为有序数组,右边为无序数组。每一轮从无序数组中选一个最小的放在有序数组末尾。
function selectSort(arr){ var i,j,k,len=arr.length,temp; for (i = 0; i < len-1; i++) { k=i; temp = arr[i]; for (j = i+1; j < len; j++) { if(temp>arr[j]){ temp = arr[j]; k = j; } } arr[k] = arr[i]; arr[i] = temp; console.log(arr); } return arr; }
[0, 8, 7, 6, 5, 4, 3, 2, 1, 9]
[0, 1, 7, 6, 5, 4, 3, 2, 8, 9]
[0, 1, 2, 6, 5, 4, 3, 7, 8, 9]
[0, 1, 2, 3, 5, 4, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
从后面挑一个最小的放到左边的有序部分。 看这个其实排到一半的时候就排好了。
3.JavaScript插入排序。左边为有序数组,右边为无序数组。每一轮排序都将无序数组的第一位与有序数组中的值对比,插入到有序数组中合适的位置。
function insertSort(arr){ var i,j,k,len=arr.length,temp; for (i = 1; i < len; i++) { temp = arr[i]; for (j=i-1; j >-1; j--) { if(arr[j]>temp){ arr[j+1] = arr[j]; }else{ break; } } arr[j+1] = temp; console.log(arr); } return arr; }排序过程:
[8, 9, 7, 6, 5, 4, 3, 2, 1, 0]
[7, 8, 9, 6, 5, 4, 3, 2, 1, 0]
[6, 7, 8, 9, 5, 4, 3, 2, 1, 0]
[5, 6, 7, 8, 9, 4, 3, 2, 1, 0]
[4, 5, 6, 7, 8, 9, 3, 2, 1, 0]
[3, 4, 5, 6, 7, 8, 9, 2, 1, 0]
[2, 3, 4, 5, 6, 7, 8, 9, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
今天太晚先写到这里。后面还有复杂一点的排序算法。大家五一愉快。
转载注明出处:http://blog.csdn.net/liusaint1992/article/details/51284799