【資料結構與演算法 03】直接插入排序

來源:互聯網
上載者:User

標籤:直接插入排序

演算法思想(從小到大排序)
  • 將待排序數組看左右兩個序列,左序列有序,有序列無序。
  • 假設第一個數array[0]為有序列,那麼array[1,N-1]為無序列.迴圈遍曆無序列,找出array[i]在有序列中應該插入的位置,插入。
  • 例如一個亂序數組為{1,3,2,4 , 假如有序列為 { 1,3 } 無序列迴圈到2時 ,那麼2在有序列中的位置應該是1 - 3 中間 , 所以 [ 3. . .2 ) 之間的所有資料右移 , 即3右移的2的位置 , 騰出了3原先所在的位置 , 由2替代

部落格地址:http://blog.csdn.net/mkrcpp/article/details/39320797

import java.util.Arrays;/*** * @title 直接插入排序 * @author michael.mao * @date 2014年9月16日 下午1:59:04 * @version V1.0 */public class InsertSort{/*** * @title 直接插入排序 * @description 將待排序數組看左右兩個序列,左序列有序,有序列無序。 *              假設第一個數array[0]為有序列,那麼array[1,N-1]為無序列.迴圈遍曆無序列,找出array[i] *              在有序列中應該插入的位置,插入。<br/> *              例如一個亂序數組為{1,3,2,4 , 假如有序列為 { 1,3 } 無序列迴圈到2時 , *              那麼2在有序列中的位置應該是1 - 3 中間 , 所以 [ 3. . .2 ) 之間的所有資料右移 , 即3 *              右移的2的位置 , 騰出了3原先所在的位置 , 由2替代 * @author michael.mao * @date 2014年9月16日 下午2:08:40 * @version V1.0 */public static void execute(int[] array){// 待插入的位置int tmpV, j = 0;// 迴圈無序列,次數為 N-1,預設有序列為 {array[0]}for (int i = 1; i < array.length; i++){// 儲存待插入的值tmpV = array[i];// 在有序列中找到合適的位置for (j = 0; j < i; j++)if ( array[i] < array[j] )break;// 如果array[i]比有序列中任何一個都大,則j退出迴圈時, j == i,則array[0,i]為有序列,無需插入if ( j != i ){// 將[j,i-1]順序右移,騰出array[j]位置for (int k = i - 1; k >= j; k--)array[k + 1] = array[k];// 插入array[j] = tmpV;}System.err.println(i + "----" + Common.print(array));}}// 迴圈測試次數public static int LOOP_COUNT = 1;public static int ARRAY_SIZE = 7;public static void main(String[] args){int[] mArray = Common.getArray(ARRAY_SIZE);int allTime = 0;for (int i = 0; i < LOOP_COUNT; i++){// 拷貝數組int[] tmpArray = Arrays.copyOf(mArray, ARRAY_SIZE);Common.print(tmpArray);long tmpTime = System.currentTimeMillis();execute(tmpArray);Common.print(tmpArray);allTime += System.currentTimeMillis() - tmpTime;}System.err.println("數組大小為(" + ARRAY_SIZE + ")的" + LOOP_COUNT + "次插入排序的平均耗時為:" + allTime / (float) LOOP_COUNT);}}

1----58 80 15 27 01 68 43 2----15 58 80 27 01 68 43 3----15 27 58 80 01 68 43 4----01 15 27 58 80 68 43 5----01 15 27 58 68 80 43 6----01 15 27 43 58 68 80

數組大小為(10000)的100次直接插入排序的平均耗時為:17.58 ms


【資料結構與演算法 03】直接插入排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.