序文: Java に夢中になった当初の考えは決して忘れられていません。「学習結果を共有することは、後の技術がどれほど深くても、良い基礎を築くことが重要です。」
ツール クラス Swapper。このツール クラスは後のアルゴリズムで使用されます。
次のようにコードをコピーします。
パッケージ com.meritit.sortord.util;
/**
* 配列の 2 つの要素を交換する 1 つのユーティリティ
*
* @著者ysjian
* @バージョン1.0
* @メール [email protected]
* @QQ 646633781
* @電話 18192235667
* @csdnブログ http://blog.csdn.net/ysjian_pingcx
* @createTime 2013-12-20
* @copyRight メリット
*/
パブリック クラス スワッパー {
privateSwapper() {
}
/**
* 配列の 2 つの要素を交換します
*
* @param oneIndex
* 1 つのインデックス
* @param anotherIndex
* 別のインデックス
* @param配列
* スワップされる配列
* @例外 NullPointerException
* 配列がnullの場合
*/
public static <T extends Comparable<T>> void swap(int oneIndex,
int anotherIndex, T[] 配列) {
if (配列 == null) {
throw new NullPointerException("null 値入力");
}
checkIndexs(oneIndex, anotherIndex, array.length);
T temp = 配列[oneIndex];
配列[oneIndex] = 配列[anotherIndex];
配列[anotherIndex] = 一時;
}
/**
* 配列の 2 つの要素を交換します
*
* @param oneIndex
* 1 つのインデックス
* @param anotherIndex
* 別のインデックス
* @param配列
* スワップされる配列
* @例外 NullPointerException
* 配列がnullの場合
*/
public static void swap(int oneIndex, int anotherIndex, int[] array) {
if (配列 == null) {
throw new NullPointerException("null 値入力");
}
checkIndexs(oneIndex, anotherIndex, array.length);
int temp = array[oneIndex];
配列[oneIndex] = 配列[anotherIndex];
配列[anotherIndex] = 一時;
}
/**
※アレンジに入っているかどうかインデックスを確認してください
*
* @param oneIndex
* 1 つのインデックス
* @param anotherIndex
* 別のインデックス
* @param arrayLength
* 配列の長さ
* @例外IllegalArgumentException
* インデックスが範囲外の場合
*/
private static void checkIndexs(int oneIndex, int anotherIndex,
int arrayLength) {
if (oneIndex < 0 || anotherIndex < 0 || oneIndex >= arrayLength
|| anotherIndex >= arrayLength) {
throw new IllegalArgumentException(
"2 つのインデックスのillegalArguments [" + oneIndex + ","
+ oneIndex + "]");
}
}
}
直接挿入ソート、InsertionSotord:
次のようにコードをコピーします。
パッケージ com.meritit.sortord.insertion;
/**
* 挿入ソート順序、時間計算量は O(n2)
*
* @著者ysjian
* @バージョン1.0
* @メール [email protected]
* @QQ 646633781
* @電話 18192235667
* @csdnブログ http://blog.csdn.net/ysjian_pingcx
* @createTime 2013-12-31
* @copyRight メリット
* @1.5以降
*/
パブリック クラス InsertionSotord {
private static Final InsertionSotord INSTANCE = new InsertionSotord();
プライベート InsertionSotord() {
}
/**
* InsertionSotord のインスタンスを取得します。インスタンスは 1 つだけです
*
* @return 唯一のインスタンス
*/
public static InsertionSotord getInstance() {
インスタンスを返します。
}
/**
* <code>int</code> の配列を挿入ソート順でソートします
*
* @param配列
* int の配列
*/
public void doSort(int... array) {
if (配列 != null && 配列の長さ > 0) {
int の長さ = 配列の長さ;
// 循環は 1 から始まり、インデックス 0 の値が参照になります
for (int i = 1; i < length; i++) {
if (配列[i] < 配列[i - 1]) {
// インデックス i の値がインデックス i-1 の値より小さい場合
int vacancy = i // 空席を i として記録します。
// インデックス i の値としてセントリーを設定します
int セントリー = 配列[i];
// キーの循環、インデックス i-1 から、
for (int j = i - 1; j >= 0; j--) {
if (配列[j] > セントリー) {
/*
* 現在のインデックス値が
* 監視員、その後後方に移動し、新しい記録を設定します
*jとして空席あり
*/
配列[j + 1] = 配列[j];
空席 = j;
}
}
// 監視員を新しい空席に設定します
配列[空き] = 見張り;
}
}
}
}
/**
* 汎用の <code>T</code> の配列を挿入ソート順でソートします
*
* @param配列
* ジェネリックの配列
*/
public <T extends Comparable<T>> void doSortT(T[] array) {
if (配列 != null && 配列の長さ > 0) {
int の長さ = 配列の長さ;
for (int i = 1; i < length; i++) {
if (array[i].compareTo(array[i - 1]) < 0) {
T セントリー = 配列 [i];
int 空孔 = i;
for (int j = i - 1; j >= 0; j--) {
if (array[j].compareTo(sentry) > 0) {
配列[j + 1] = 配列[j];
空席 = j;
}
}
配列[空き] = 見張り;
}
}
}
}
}
テストTestInsertionSortord:
次のようにコードをコピーします。
パッケージ com.meritit.sortord.insertion;
java.util.Arraysをインポートします。
/**
* 挿入ソート順をテストする
*
* @著者ysjian
* @バージョン1.0
* @メール [email protected]
* @QQ 646633781
* @電話 18192235667
* @createTime 2013-12-31
* @copyRight メリット
*/
パブリック クラス TestInsertionSortord {
public static void main(String[] args) {
InsertionSortord insertSort = InsertionSortord.getInstance();
int[] 配列 = { 3, 5, 4, 2, 6 };
System.out.println(Arrays.toString(array));
insertSort.doSort(配列);
System.out.println(Arrays.toString(array));
System.out.println("--------------");
整数[] 配列1 = { 3, 5, 4, 2, 6 };
System.out.println(Arrays.toString(array1));
insertSort.doSortT(array1);
System.out.println(Arrays.toString(array1));
}
}