1.冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
<script>
function bubbleSort(arr){
var len = arr.length;//数组长度
for(var i=0; i<len-1; i++){
//将最大的数存放至倒数第一位
for(var j=0; j<len-1-i; j++){
if(arr[j]>arr[j+1]){
var temp = arr[j+1];//将小的数存放到temp中
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
var arr1 = [200,3,4,6,9,10,5,7,11,45];
bubbleSort(arr1)
for(var i=0;i<arr1.length; i++){
document.write(arr1[i] + "<br />")
}
</script>
2.选择排序
<script>
//思路:标记索引[从小到大/从大到小]
var arr1 = [200,3,4,6,9,10,5,7,11,45];
function selectionSort(arr){
var len = arr.length;//数组长度
var minIndex,temp;//minIndex存放最小的索引 temp:临时变量
for(var i=0; i<len; i++){
minIndex = i;//假设
for(var j = i+1; j<len; j++){
if(arr[j]<arr[minIndex]){
minIndex = j
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp
}
return arr;
}
console.log(selectionSort(arr1))
</script>
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
3.插入排序
<script>
function insertionSort(arr) {
var len = arr.length;//数组长度
var preIndex, current;//前一位 当前
for (var i = 1; i< len; i++) {
preIndex = i-1;
current = arr[i];
while(preIndex >=0 && arr[preIndex] >current) {
arr[preIndex+1] = arr[preIndex];
preIndex--;
}
arr[preIndex+1] = current;
}
return arr;
}
var arr1 = [200,3,4,6,9,10,5,7,11,45];
console.log(insertionSort(arr1))
</script>
每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
4.归并排序
将两个顺序序列合并成一个顺序序列的方法。
5.快速排序
首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
6.sort()排序
传入参数,实现升序,降序;
各种排序的速度性能(10万数据)
1.快速排序 cutoff5—>30-50ms cutoff10 —>30-60ms cutoff50 ---->40-50ms cutoff3效果不错—>30-50ms,30ms出现的机会很多 cutoff==0时(即不在分割长度短的时候转为插入排序),效果依然不错,30-50ms,30ms出现的很多
2.sort排序 55-70ms
3.归并排序耗时80-100ms
4.选择排序耗时5800ms左右
5.插入排序耗时10600ms左右
6.冒泡排序耗时26000ms左右