一、冒泡排序
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
冒泡排序算法的原理如下:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
var arr=[5,6,8,3,5,12,4];
var bigarr;
var j;
for(var i=0;i<arr.length;i++){ //外循环遍历数组的每一项
for(var j=i+1;j<arr.length;j++){ //内循环则用于比较元素
if(arr[i]>arr[j]){
bigarr=arr[i];
arr[i]=arr[j];
arr[j]=bigarr;
}
}
}
console.log(arr); //[3, 4, 5, 5, 6, 8, 12]
二、选择排序
是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。(从小到大);
步骤如下:
1.从数组的开头起,将第一个元素和其他所有元素都进行一次比较,选择出最小的元素放在数组的第一个位置。
2.然后再从第二个元素开始,将第二个元素和除第一个之外的所有元素进行一次比较,选择出最小的元素放在数组的第二个位置。
3.对后面的第三,第四……的元素分别重复上面的步骤,知道所有的数据完成排序。
var arr=[5,6,8,3,5,12,4];
var minindex; //定义一个变量,保存最小值
for(var i=0;i<arr.length;i++){
minindex=i;
for(var j=i+1;j<arr.length;j++){ //将第一个元素和其他所有元素都进行一次比较,发现小的就保存在minnindex,,知道j循环完,,把minindex和i的值调换;
if(arr[j]<arr[minindex]){ //注意这儿是minindex,不能是i
minindex=j;
}
}
if(minindex!=i){
var temp=arr[i]
arr[i]=arr[minindex];
arr[minindex]=temp;
}
}