国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Scala冒泡排序、快速排序、插入排序

2019-11-11 02:16:19
字體:
供稿:網(wǎng)友

冒泡排序:

比較相鄰的元素。 如果第一個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對。 在這一點,最后的元素應(yīng)該會是最大的數(shù)。針對所有的元素重復(fù)以上的步驟,除了最后一個。持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。快速排序:

所有小于”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的左邊;所有大于”基準(zhǔn)”的元素,都移到”基準(zhǔn)”的右邊。 這個操作稱為分區(qū)(partition) 操作,分區(qū)操作結(jié)束后,基準(zhǔn)元素所處的位置就是最終排序后它的位置

插入排序:

通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。

代碼:

package Test2/**  * Created by zhouzhongqing on 2017/2/7 0007.  */object ArithmeticTest {  def main(args: Array[String]): Unit = {      //bubblingSort(0);    //  insertSort(0);    //val array = Array(2,4,3,5,8,66,7,22,12,11);    val array = Array(3,2);    quickSort(array, 0, array.length - 1);// 快速排序    for ( i <- 0 to (array.length - 1) ) {      PRintln(array(i),"----",array.length);    }  }/**  * 快速排序  * 是對冒泡排序的一種改進(jìn)。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,  * 其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,以此達(dá)到整個數(shù)據(jù)變成有序序列。  *param data  *            目標(biāo)數(shù)組  *param start  *            起始位  * param end  *            結(jié)束位  * */  def quickSort( data: Array[Int] , start : Int , end : Int ) : Int = {    // 設(shè)置關(guān)鍵數(shù)據(jù)key為要排序數(shù)組的第一個元素,    // 即第一趟排序后,key右邊的數(shù)全部比key大,key左邊的數(shù)全部比key小    val key = data(start);    // 設(shè)置數(shù)組左邊的索引,往右移動比key大的數(shù)    var i = start;    // 設(shè)置數(shù)組右邊的索引,往左移動比key小的數(shù)    var j = end;    // 如果左邊索引比右邊索引小,則還有數(shù)據(jù)沒有排序    while (i < j){        while(data(j) > key && j > i){ //  2  3   1 0            j = j - 1;        }      data(i) = data(j);//data(0) = 2      while (data(i) < key && i < j ){// 2 3    0  1        i = i+1;// i = 1      }      data(j) = data(i);// data(0) = 2    }    //此時 i == j    data(i) = key;  // data(1) = 3    //遞歸調(diào)用    if(i - 1 > start){      // 遞歸調(diào)用,把key前面的完成排序      quickSort(data, start, i - 1);    }    if(i + 1 < end){      // 遞歸調(diào)用,把key后面的完成排序      quickSort(data, i + 1, end);    }    return 0;  }/**  * 插入排序,從小到大排序  * 這個算法從數(shù)組的第二個元素開始循環(huán),將選中的元素與之前的元素一一比較,如果選中的元素小于之前的元素,則將之前的元素后移,最后再將選中的元素放在合適的位置。在這個算法執(zhí)行的過程中,總是保持著索引i之前的數(shù)組是升序排列的。  * */  def insertSort( a:Int ) : Int = {    val array = Array(2,4,3,5,8,66,7,22,12,11);    for ( i <-1 to (array.length -1 ) ) {//這個算法從數(shù)組的第二個元素開始循環(huán) j <- 1        var arrayVal = array(i);        var j = i - 1;//得到前一位元素      // while 循環(huán)執(zhí)行 2      while( j >= 0 &&  array(j) > arrayVal){//判斷前面的是否大于arrayVal        array(j+1) = array(j);//如果大于,將它放后面        j = j-1;     //   println(array(j),"----",array.length,"j:" , j);      }      array(j+1) = arrayVal;//如果一次都不滿足while的條件,arrayVal還在原來的位置;如果滿足過arrayVal會放在前面    }    for ( i <- 0 to (array.length - 1) ) {      println(array(i),"----",array.length);    }    return 0;  }  /**    * 冒泡排序    *從大到小排列    * 自上而下對相鄰的兩個數(shù)依次進(jìn)行比較和調(diào)整,讓較大的數(shù)往下沉,較小的往上冒。即:每當(dāng)兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時,就將它們互換。    */  def bubblingSort( a:Int ) : Int = {    val array = Array(2,4,3,5,8,66,7,22,12,11);    for ( j <-0 to (array.length - 3) ) {      for (i <- 0 to (array.length - 2 - j)) {        //     println(array(i),"----",array.length);        if (array(i) > array(i + 1)) {//判斷前一個元素是否大于后一個          var temp = 0;          temp = array(i + 1);//賦值          array(i + 1) = array(i);//如果前一個元素大,把他移動到后面          array(i) = temp;//把后面一個移動到前面        }      }    }    for ( i <- 0 to (array.length - 1) ) {      println(array(i),"----",array.length);    }    return 0;  }}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 志丹县| 枣强县| 开阳县| 武隆县| 锦屏县| 读书| 乐至县| 绥滨县| 成安县| 太谷县| 平泉县| 长寿区| 文山县| 长武县| 定西市| 板桥市| 霍林郭勒市| 醴陵市| 余干县| 边坝县| 新宁县| 横山县| 陈巴尔虎旗| 新河县| 忻城县| 澎湖县| 土默特右旗| 化德县| 饶平县| 凤冈县| 恩施市| 马山县| 达拉特旗| 台湾省| 宜兰市| 金华市| 大同市| 天等县| 广水市| 莆田市| 安乡县|