您的位置:首页 > 其它

十大经典排序整理

2016-10-08 08:47 204 查看
1、冒泡排序:

相邻的两个元素做比较,顺序不符合则交换顺序,这个算法的名字是因为越小的元素经由交换慢慢的浮到数列的顶端

(2)算法描述

a.比较相邻的元素,如果第一个比第二个大,就交换他们

b.对每一对相邻元素做同样工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数

c.针对所有的元素重复以上的步骤,除了最后一个

d.重复步骤1-3,直到排序完成

js实现:

function bubbleSort(arr){
var length=arr.length;
for(var i=0;i<len;i++){
for(var j=0;j<len-1-i;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}

2、选择排序
function selectionSort(arr){
var len=arr.length;
var minIndex,temp;
for(var i=0;i<len-1;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;
}

3.插入排序

插入排序算法描述为:对于未排序的数据,在已经排序的序列中从后往前扫描,找到相应位置并插入

算法描述和实现:

a.从第一个元素开始,该元素可以认为已经被排序

b.取出下一个元素,在已经排序的元素序列中从后向前扫描

c.如果该元素(已经排序)大于新元素,将该元素移到下一位置

d.重复步骤3,直到找打已经排序的元素小于或者等于新元素的位置

e。将新元素插入到该位置后

f.重复步骤2-5

function insertSort(array){
if(Object.prototype.toString.call(arry).slice(8,-1)==='Array'){
for(var i=1;i<array.lenth;i++){
var key=array[i];
var j=i-1;
while(j>=0&&array[j]>key){
array[j+1]=array[j];
j--;
}
array[j+1]=key;
}
return array;
}
else {
return 'array is not an Array';
}
}

改进的插入排序:

function binaryInsertionSort(array){
if(Object.prototype.toString.call(array).slice(8,-1)==='Array'){
for(var i=1;i<array.lenth;i++){
var key=array[i],left=0;right=i-1;
while(left<=right){
var middle=parseInt((left+right)/2);
if(key<array[middle]){
right=middle-1;
}else{
left=middle+1;
}
}
for(var j=i-1;j>=left;j--){
array[j+1]=array[j];
}
array[left]=key;
}
return array;
}else{
return 'array is not an Array'
}
}

4.希尔排序

funcion shellSort(arr){
var len=arr.lenth,
temp,gap=1;
while(gap<len/5){
gap=gap*5+1;

}
for(gap;gap>0;gap=Math.floor(gap/5)){
for(var i=gap;i<len;i++){
temp=arr[i];
for(var j=i-gap;j>=0&&arr[j]>temp;j-=gap){
arr[j+gap]=arr[j];
}
arr[j+gap]=temp;
}

}
return arr;
}

5.归并排序

算法描述:

a.把长度为n的输入序列分成两个长度为n/2的子序列

b.对这两个子序列分别采用归并排序

c。将两个排序好的子序列合并成一个最终的排序序列

算法实现:

6.快速排序

算法简介:

通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个徐柳有序

7.基数排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: