欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java版 直接选择排序 算法精讲

程序员文章站 2024-01-17 21:27:22
...

直接选择排序方法属于选择排序的一种,它的排序速度要比冒泡排序快一些。

直接排序的基本思想是将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值。


import java.util.Scanner;
/**
 * @author 九幽天决
 * 
 * 在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要比较n-i 次(1<=i<=n-1)
 * 每次交换最多需要3次移动,因此,总的比较次数:C=(n*n - n)/2
 * 总的移动次数(最大值): 3(n-1).由此可知,直接选择排序的时间复杂度为 O(n^2)
 */
public class SelectionSort {
	public static void selectionSort(int[] a) {
		if (a==null&&a.length<1) {
			return;
			/**
			 * 空数组直接返回
			 **/
		}
		for (int i = 0; i < a.length-1; i++) { // i表示次数,共进行n-1次选择和交换
			int minIndex = i; // 用minIndex表示最小元素的下标
			for (int j = i+1; j < a.length; j++) {// 找到当前排序区间中最小元素的下标
				if (a[minIndex] > a[j]) {// 如果后面的元素小于当前最小元素,则用minIndex记录下后面最小元素的下标
					minIndex = j;//储存最小元素下标
				}
			}
			if (minIndex != i) {// 当最小元素的下标不为i时交换位置
				int temp = a[i];
				a[i] = a[minIndex];
				a[minIndex] = temp;
			}
		}
	}

	/**
	 * 请输入元素的个数 7 
	 * 请依次输入元素 11 44 75 10 5 52 144
	 * 排序之后 5 10 11 44 52 75 144 
	 */
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入元素的个数");
		int n = sc.nextInt();// 确定数组容量1
		int[] a = new int[n];// 创建数组
		System.out.println("请依次输入元素");// 数组元素赋值
		for (int i = 0; i < a.length; i++) {
			a[i] = sc.nextInt();
		}
		selectionSort(a);
		System.out.println("排序之后");
		for(int e:a){// 循环打印出排序后的数组
			System.out.print(e+" ");
		}
	}
}