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

选择排序——直接选择排序

程序员文章站 2022-03-09 20:46:44
...

选择排序:每一趟从待排序的记录里选取关键字最小的记录,顺序放在已经排好序的子文件最后,直到全部记录排序完毕,

一、直接选择排序

1.基本思想:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R[1]~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

2.java实现:

	public void selectSort(int[] a) {
		int len=a.length;
		//进行n-1次选择
		for(int i=0;i<len-1;i++) {
			int min=a[i];
			int minIndex=i;//最小值的下标
			for(int j=i+1;j<len;j++) {
				if(a[j]<a[i]) {
					min=a[j];
					minIndex=j;
				}
			}
			//将找到的最小值与i位置元素交换
			if(min!=i) {
				int temp=a[i];
				a[i]=a[minIndex];
				a[minIndex]=temp;
			}
		}
	}

3.算法分析

关键字比较次数:共需要进行n-1次选择,每次选择需要进行 n-i 次比较 (1<=i<=n-1),总的比较次数为n(n-1)/2

记录移动次数:初始为正序时移动为0;反序每趟都要进行交换操作,总的移动次数为3(n-1)

直接选择排序的时间复杂度 O(n^2) ,所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。

由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。