1、选择排序 每一趟从待排序的记录中选出最小的元素,顺序放到已排好序的序列的最后,直到全部序列排序完毕。
<script type="text/javascript"> function selectionSort(arr){ for(var i = 0; i < arr.length-1; i++){ var k = i; for(var j = i+1;j < arr.length;j++){ if(arr[j]<arr[k]){ k=j; } } if(k != i){ var temp = arr[k]; arr[k] = arr[i]; arr[i] = temp; } } return arr; } var array = [10,14,11,5,8,24,45,99]; document.write("当前数组是:"+'<br>'+array+'<br>'); document.write("排序后的数组是:"+'<br>'+selectionSort(array)); </script>2、快速排序 先从数列中取出一个数作为基准数,分区过程中将比这个数大的全部放到它的右边,小于或等于它的数全部放到它的左边,再对左右区间重复上述步骤,直到各个区间都只有一个数。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script type="text/javascript"> function quickSort(array){ var middle = Math.floor(array.length/2); middleNum = array[middle]; var small = [], big = []; if(array.length <= 2){ return array; } for(var i = 0; i < array.length; i++){ if(i == middle){ continue; } array[i] > middleNum ? (big[big.length] = array[i]) : (small[small.length] = array[i]); } small[small.length] = middleNum; return quickSort(small).concat(quickSort(big)); } var arr = [10,14,11,5,8,45,24,99]; document.write("当前数组是:"+'<br>'+arr+'<br>'); document.write("排序后的数组是:"+'<br>'+quickSort(arr)); </script> </body> </html>3、二分插入排序 二分插入排序也称折半插入排序,基本思想是:设数列[0….n]分为两部分一部分是[0…i]为有序序列,另一部分是[i+1…..n]为无序序列,从无序序列中取一个数 x ,利用二分查找算法找到 x 在有序序列中的插入位置并插入,有序序列还是有序的,接下来重复上述步骤,直到无序序列全部插入有序序列 ,这是整个序列只剩下有序序列,即有序了。
<script type="text/javascript"> function sort(array){ for(var i = 1; i < array.length; i++){ var temp = array[i]; var left = 0, right = i - 1; while(left <= right ){ var mid = Math.floor((left+right)/2); if(temp > array[mid]){ left = mid + 1; }else { right = mid - 1 ; } } for(j = i - 1 ; j >= left; j--){ array[j+1] = array[j]; } array[left] = temp; } return array; } var arr = [10,14,11,5,8,45,24,99]; document.write("当前数组是:"+'<br>'+arr+"<br>"); document.write("排序后的数组是:"+'<br>'+sort(arr)); </script>4、希尔排序 先将序列分成较多个子序列分别进行排序,再分成较少个子序列分别进行排序,直到最后为一个序列排序。
<script type="text/javascript"> function shellSort(arr){ var len = arr.length; var b = len/2; while(b >= 1){ for(var i = 0; i < b; i++){ for(var j = i+b; j < len; j = j+b){ var temp = arr[j]; var k = j - b; while (k >= i&& temp <arr[k]) { arr[k+b] = arr[k]; k = k -b; } arr[k+b] = temp; } } b = b/2; } return arr; } var arr = [10,14,11,5,8,45,24,99]; document.write("当前数组是:"+'<br>'+arr+'<br>'); document.write("排序后的数组是:"+'<br>'+shellSort(arr)); </script>