交换排序基本思想与实现

交换排序的思想是:两两比较待排序的关键字,发现两个关键字的顺序不对时候(数字大的在数字小的前面),交换位置,直到没有反序的数字为止。

应用交换排序思想的排序有:冒泡排序和快速排序。

一,冒泡排序:

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 来看结果吧

交换排序基本思想与实现