アルゴリズム4(データ構造)学習-一次ソートアルゴリズム(選択ソート、挿入ソート、ヒルソート)の原理とコード

1.選択ソート

簡単な説明は次のとおりです。最初に配列内の最小の要素を見つけて、それを配列の最初の要素と交換します。次に、残りの要素の中から最小の要素を見つけて、配列の2番目の要素と位置を交換します。以下同様に、配列全体を並べ替えます。
長さNの配列の場合、ソートを選択するには、約(N ^ 2)/ 2の比較とN回の交換が必要です。

2.挿入ソート

挿入ソート、各要素を他の順序付けられたローカル配列の適切な位置に挿入します。挿入された要素のためのスペースを確保するために、残りの要素を適切な位置に1か所移動する必要があります。
簡単に言えば、最初にインデックス値iを決定し、このiから始めて、j = iを定義し、a [j-1]> a [j]が2つを交換する場合、a [j]をa [j-1]と比較します。 、J–、a [j-1] <a [j]の場合は、正しい位置に到達したことを意味し、小さなループを終了します。それ以外の場合は、j = 0まで操作を繰り返します。小さなループが完了したら、インデックスi ++を配置します。

3.ヒルソート

簡単に言うと、最初に「挿入ソート」のスワップ間隔を1からhに変更し、ラウンドの配置後にh = h / 3に変更してから、h> = 1になるまで操作を繰り返します。

以下はコードです

import java.util.*;

public class Example {
    
    

	//选择排序
	public static void SelectSort(Comparable[] a) {
    
    
		for (int i = 0; i < a.length; i++) {
    
    
			int min = i;
			for (int j = i+1; j < a.length; j++) {
    
    
				if (less(a[j], a[min])) {
    
    
					min = j;
				}
			}
			exch(a, i, min);
		}
	}
	
	/*插入排序,简单来说就是先确定一个索引值i,从这个i开始,定义j=i,a[j]与a[j-1]比较,若a[j-1]>a[j]则交换二者,j--,
	     若a[j-1]<a[j]则表明已经到了正确的位置,退出小循环,否则继续重复操作,直到j=0;完成小循环后把索引i++*/
	public static void InsertSort(Comparable[] a) {
    
    
		for (int i = 1; i < a.length; i++) {
    
    
			for (int j = i; j > 0 && less(a[j], a[j-1]); j--) {
    
    
				exch(a, j, j-1);
			}
		}
	}
	
	//希尔排序
	public static void ShellSort(Comparable[] a) {
    
    
		int h = 1;
		while (h < a.length/3) {
    
    
			h = 3*h + 1;
		}
		while (h >= 1) {
    
    
			for (int i = h; i < a.length; i++) {
    
    
				for (int j = i; j >= h && less(a[j], a[j-h]); j-=h) {
    
    
					exch(a, j, j-h);
				}
			}
			h = h / 3;
		}
	}
	
	//做比较判断,返回bool类型
	public static boolean less(Comparable v, Comparable w) {
    
    
		return v.compareTo(w) < 0;
	}
	
	//交换数组元素
	private static void exch(Comparable[] a, int i, int j) {
    
    
		Comparable t = a[i];
		a[i] = a[j];
		a[j] = t;
	}
	
	//打印出数组
	public static void show(Comparable[] a) {
    
    
		for (int i = 0; i < a.length; i++) {
    
    
			System.out.print(a[i]+" ");
		}
		System.out.println();
	}
	
	public static void main(String[] args) {
    
    
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		Comparable[] arr = new Comparable[n];
		for (int i = 0; i < arr.length; i++) {
    
    
			arr[i] = in.nextInt();
		}
		SelectSort(arr);
		InsertSort(arr);
		ShellSort(arr);
		show(arr);
	}

}

おすすめ

転載: blog.csdn.net/UCB001/article/details/105010877