国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 株洲县| 浙江省| 恩施市| 玉门市| 平邑县| 仙居县| 宣化县| 宜城市| 周至县| 威信县| 清徐县| 潮安县| 海南省| 铜梁县| 安岳县| 新兴县| 嘉祥县| 濉溪县| 武乡县| 孟村| 云阳县| 汝南县| 庄河市| 于田县| 东阳市| 榆林市| 册亨县| 遂平县| 赫章县| 南宫市| 禹州市| 中方县| 普宁市| 大安市| 安达市| 长阳| 镇平县| 隆子县| 谷城县| 确山县| 仲巴县|