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

首頁 > 編程 > Java > 正文

Java排序算法總結(jié)之插入排序

2019-11-26 15:11:51
字體:
供稿:網(wǎng)友

本文實例講述了Java插入排序方法。分享給大家供大家參考。具體分析如下:

有一個已經(jīng)有序的數(shù)據(jù)序列,要求在這個已經(jīng)排好的數(shù)據(jù)序列中插入一個數(shù),但要求插入后此數(shù)據(jù)序列仍然有序,這個時候就要用到插入排序法。本文主要介紹的是插入排序的java實現(xiàn)。
 
插入排序的基本操作就是將一個數(shù)據(jù)插入到已經(jīng)排好序的有序數(shù)據(jù)中,從而得到一個新的、個數(shù)加一的有序數(shù)據(jù)。比較和交換的時間復(fù)雜度為O(n^2),算法自適應(yīng),對于數(shù)據(jù)已基本有序的情況,時間復(fù)雜度為O(n),算法穩(wěn)定,開銷很低。算法適合于數(shù)據(jù)已基本有序或者數(shù)據(jù)量小的情況。

插入算法把要排序的數(shù)組分成兩部分:第一部分包含了這個數(shù)組的所有元素,但將最后一個元素除外,而第二部分就只包含這一個元素。在第一部分排序后,再把這個最后元素插入到此刻已是有序的第一部分里的位置。

算法描述

一般來說,插入排序都采用in-place在數(shù)組上實現(xiàn)。具體算法描述如下:

1. 從第一個元素開始,該元素可以認為已經(jīng)被排序
2. 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描
3. 如果該元素(已排序)大于新元素,將該元素移到下一位置
4. 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
5. 將新元素插入到下一位置中
6. 重復(fù)步驟2

如果比較操作的代價比交換操作大的話,可以采用二分查找法來減少比較操作的數(shù)目。該算法可以認為是插入排序的一個變種,稱為二分查找排序。

代碼實現(xiàn)

public void insertionSort() {   // 插入排序   int out, in;   int count1 = 0, count2 = 0;// 復(fù)制次數(shù),比較次數(shù)   for (out = 1; out < nElems; out++) {    long temp = a[out];    in = out;    boolean flag=in>0&&a[in-1]>=temp;    while(flag){    if(a[in-1]>=temp){     if(in>0){     a[in]=a[in-1];     count1++;     --in;      }    }     count2++;     flag=in>0&&a[in-1]>=temp;    }     a[in] = temp;   }   System.out.println("復(fù)制次數(shù)為:" + count1 + " 比較次數(shù)為:" + count2); }

插入排序法在數(shù)據(jù)已有一定順序的情況下,效率較好。但如果數(shù)據(jù)無規(guī)則,則需要移動大量的數(shù)據(jù),其效率就與冒泡排序法和選擇排序法一樣差了。

希望本文所述對大家的java程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 福州市| 大理市| 高陵县| 喜德县| 广州市| 新乡县| 丹阳市| 沧源| 大英县| 朝阳市| 通道| 柳河县| 镇沅| 石渠县| 永平县| 赤壁市| 治县。| 柳江县| 邵东县| 中卫市| 通山县| 滦平县| 博湖县| 子长县| 常德市| 万山特区| 平定县| 望城县| 柘荣县| 远安县| 茂名市| 铜梁县| 永兴县| 博罗县| 金坛市| 荃湾区| 平阴县| 怀宁县| 拉孜县| 蒲城县| 清河县|