• 交换排序基本思想与实现


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

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

    一,冒泡排序:

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

     

  • 相关阅读:
    软件工程个人作业01
    阅读计划及浅读问题
    引言作业1
    多态和异常分析课后
    大道至简七八章阅读
    接口与继承 课后实践
    构建执法阅读笔记02
    冲刺第五天
    学习进度条七
    冲刺第四天
  • 原文地址:https://www.cnblogs.com/huanhuan8808/p/3173598.html
Copyright © 2020-2023  润新知