交换排序的思想是:两两比较待排序的关键字,发现两个关键字的顺序不对时候(数字大的在数字小的前面),交换位置,直到没有反序的数字为止。
应用交换排序思想的排序有:冒泡排序和快速排序。
一,冒泡排序:
1.1基本思想:将被排序的数组arr[1,2,..n],原则上是轻气泡在重气泡之上。扫描数组arr[],,凡扫描到违反本原则的轻气泡,就使其向上"飘浮",即a[i] >a[i+1],则将他们两个为止互换。如此反复进行。直到没有轻气泡在重气泡之上为止。
2.2举个例子:
对下面这组数据排序,34,23,45,78,33,12,3,67
第一遍扫描
i=0, a[0]>a[1],交换,数组变为23,34,45,78,33,12,3,67
i=1,a[1]<a[2],不交换,
i=2,a[2]<a[3],不交换,
i=3,a[3]>a[4],交换,数组变为23,34,45,33,78,12,3,67
i=4,a[4]>a[5],交换,数组变为23,34,45,33,12,78,3,67
i=5,a[5]>a[6],交换,数组变为23,34,45,33,12,3,78,67
i=6,a[6]>a[7],交换,数组变为23,34,45,33,12,3,67,78
第一次交换的结果,23,34,45,33,12,3,67,78
将最大的数字排在了数组末尾;
第二次扫描,将会把小于78但是大于其他数的数组排在a[6]的位置上。
1.3 看过上面的例子,不知道怎么写吗?我写一个,你们看看吧
var arr = new Array(34,23,45,78,33,12,3,67,90,1,29);
var l = arr.length;
var temp;
function bubbleSort(a){
for(i=0;i<l;i++){
for(j=0;j<l-i-1;j++){
if(a[j] > a[j+1]){
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
return a;
}
bubbleSort(arr);
1.4给你们看结果
看懂了没有
二:快速排序
2.1基本思想:快速排序是对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想。通过一趟排序将要排序的数据分成两个独立的部分。其中一部分的所有数据都要比令一部分的数据小,再次按照这个方法对这两部分的数据进行快速排序,整个排序过程可以递归进行,直到数据有序为止。
2.2 快速排序算法
var arr = new Array(34,23,45,78,33,12,3,67,90,1,29); function quickSort(a,l,r){ if(l < r ){ //仅当区间长度大于1时才须排序 var mid = a[parseInt((r+l)/2)],i=l-1,j=r+1; while(true){ while(a[++i] < mid ) ; while(a[--j] > mid ) ; if(i >= j) break;//在这个区间里排序完毕,没有可排数据,跳出循环 var temp = a[i]; a[i] = a[j]; a[j] = temp; } quickSort(a,l,i-1);//对左区间递归排序 quickSort(a,j+1,r);//对右区间递归排序 } return a; } quickSort(arr,0,arr.length-1);
2.3 来看结果吧