日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

插入排序之Java实现

發(fā)布時(shí)間:2025/3/20 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 插入排序之Java实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、聲明

  算法思路部分借鑒于《算法導(dǎo)論》(第三版),實(shí)現(xiàn)過(guò)程均屬作者原創(chuàng),轉(zhuǎn)載或引用請(qǐng)注明出處。

?

二、算法概述

??? 插入排序算法適用于少量元素的排序。插入排序的過(guò)程就好比排序一副撲克牌。開(kāi)始時(shí),左手為空并且桌子上的牌面朝下。然后,每次從桌子上拿走一張撲克牌并將它插入左手中正確的位置。為了找到牌的正確位置,需要從右開(kāi)始將它與已在手中的每張牌進(jìn)行比較。每次插入結(jié)束后左手中的牌總是排序好的。

?

三、算法思路

1.位碼實(shí)現(xiàn)

INSERTION-SORT(A)for j = 2 to A.lengthkey = A[j]    // 將桌面的牌拿至右手i = j -1     // 左手中已經(jīng)排序好的牌的數(shù)量while i > 0 and A[i] > key    // 將右手中的key牌與左手中的牌從右到左進(jìn)行比較A[i+1] = A[i]i = i - 1A[i+1] = key    // 將右手中的牌插入到左手中

?

?

四、算法分析

  最壞情況的運(yùn)行時(shí)間為Θ(n^2),所以不適合大量輸入的排序。

?

五、算法實(shí)現(xiàn)

1.InsertionSort類

  InsertSort是抽象類,需要實(shí)例化時(shí)需要實(shí)現(xiàn)public abstract int elemCompare(T a, T b)方法,此方法描述了比較類型T兩個(gè)實(shí)例大小的策略。調(diào)用srot方法即可對(duì)ArrayList<T>進(jìn)行插入排序。

import java.util.ArrayList;
/**
?* 作者原創(chuàng),引用請(qǐng)注明出處
?* @author ChameleonChen
?*/
public abstract class InsertionSort<T> {public static final int A_GREATER_THAN_B = 1;public static final int A_LESS_THAN_B = 2;public static final int A_EQUALS_B = 3;/*** 實(shí)現(xiàn)a b 兩個(gè)元素的比較策略。* ex:* int elemCompare(Integer a, Integer b) {* if (a > b) return InsertionSort.A_GREATER_THAN_B;* else if (a < b) return InsertionSort.A_LESS_THAN_B;* else return InsertionSort.A_EQUALS_B;* }* @param a* @param b* @return a大于b,返回InsertionSort.A_GREATER_THAN_B;a小于b,返回InsertionSort.A_LESS_THAN_B* a等于b,返回InsertionSort.A_EQUALS_B.*/public abstract int elemCompare(T a, T b); public static final int NON_DECREASING_SORT = 1; // 非遞減排序public static final int NON_INCREASING_SORT = 2; // 非遞增排序/*** 對(duì)elems進(jìn)行排序,改變其在內(nèi)存中的值。* 實(shí)現(xiàn)算法如下:* INSERTION-SORT(A)* for j = 2 to A.length* key = A[j]* * i = j - 1* while i > 0 and A[i] > key* A[i+1] = A[i]* i = i - 1* A[i+1] = key* * @param elems* @param sortType 排序的類型:非遞減排序 InsertionSort.NON_DECREASING_SORT;* 非遞增排序InsertionSort.NON_INCREASING_SORT*/public void sort(ArrayList<T> elems, int sortType) {if (elems == null){throw new NullPointerException("the elems can not be null");}int expected;switch (sortType) {case NON_DECREASING_SORT:expected = A_GREATER_THAN_B;break;case NON_INCREASING_SORT:expected = A_LESS_THAN_B;break;default :throw new IllegalArgumentException("the sortType's value is illegal");}T temp;for (int j=1,i; j<elems.size(); j++) {temp = elems.get(j);i = j - 1;while (i>=0 && elemCompare(elems.get(i), temp) == expected) {elems.set(i+1, elems.get(i));i = i - 1;}elems.set(i+1, temp);}} }

?

轉(zhuǎn)載于:https://www.cnblogs.com/chenshi/p/3889784.html

總結(jié)

以上是生活随笔為你收集整理的插入排序之Java实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。