算法4(数据结构)学习—初级排序算法原理及代码(选择排序、插入排序、希尔排序)

1、选择排序

简单描述下就是:首先找到数组中最小的那个元素,将它和数组第一个元素交换位置;然后在剩下的元素中找到最小的元素与数组第二个元素交换位置;如此往复,直到将整个数组排序。
长度为 N 的数组,选择排序需要大约(N^2)/2次比较和N次交换

2、插入排序

插入排序,将每一个元素插入到其他已经有序的局部数组中的适当位置,为了给插入的元素腾出空间,我们需要将其余适当位置后的元素右移一位;
简单来说就是先确定一个索引值i,从这个i开始,定义j=i,a[j]与a[j-1]比较,若a[j-1]>a[j]则交换二者,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