zoukankan      html  css  js  c++  java
  • 交换排序基本思想与实现

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

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

    一,冒泡排序:

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

     

  • 相关阅读:
    Essential C++ 3.1 节的代码练习——哨兵方式
    Essential C++ 3.1 节的代码练习——指针方式
    《搞不定人,你如何带团队?》读书记录
    selenium+python,解决selenium弹出新页面,无法定位元素的问题(报错:Unable to locate element:元素)
    selenium 元素(class_name、link_text、css_selector)定位方法
    selenium+python+eclipse 实现 “问卷星”网站,登录与检查登录示例!
    selenium IDE中log的保存与查看方法
    selenium IDE工具页面介绍!
    selenium IDE 使用方法整理
    selenium IDE的3种下载安装方式
  • 原文地址:https://www.cnblogs.com/huanhuan8808/p/3173598.html
Copyright © 2011-2022 走看看