简单选择排序(Selection Sort)

1.基本原理:每次从待排序的数据元素中选出最小(最大)的一个元素,存放在已排好序列的起始位置(末尾位置),直到全部待排序的数据元素排完。

2.大概思路:

  (1)第1趟排序,在待排序数据arr[0],arr[1]...arr[n-1]选出最小的数据,将其与arr[0]进行交换。

  (2)第2趟排序:在待排序的arr[1],arr[2].....arr[n-1]中选出最小的元素与arr[1]进行交换。

  ......

  (3)依次继续,则第i趟在待排序数据arr[i-1],arr[i]....arr[n-1]中选出最小的元素与其进行交换,直至全部完成。

  

package demo.datastructures;

public class SelectSortDemo {
	
	public static void selectSort(int[] arr){
		if(arr==null || arr.length<2) {return;}
		//如数组有n个元素,则进行n-1趟选择最小值
		for(int i=0;i<arr.length-1;i++)
		{
			//记录替换最小值位置
			int min=i;
			//遍历待排序数组元素(i之后的元素)
			for(int j=i+1;j<arr.length;j++)
			{
				//如果 已排序中的最大值 大于 待排序的值,则记录当前比较的最小值,直至待排序元素全部遍历完,找到最小值
				if(arr[min]>arr[j])
				{
					min=j;
				}
			}
			int temp=arr[min];
			arr[min]=arr[i];
			arr[i]=temp;
		}
		//遍历输出选择排序后的结果
		for(int k=0;k<arr.length;k++)
		{
			System.out.println(arr[k]);
		}
	}
	
	public static void main(String[] args) {
		int[] arr={4,2,6,8,9,1,3,5,7,0};
		selectSort(arr);
	}

}

3.选择排序的时间复杂度

        简单选择排序的比较次数与序列的初始排序无关。假设待排序的系列有N个元素,则比较次数总是N(N-1)/2,
   而移动次数与系列的初始排序有关,当排序正序时,移动次数最少,为0,
   当序列反序时,移动次数最多,为3N(N-1)/2,
   所以,综上,简单排序的时间复杂度为O(N*N)

 

平均时间复杂度最好情况最坏情况空间复杂度
O(n²)O(n²)O(n²)O(1)

             选择排序的简单和直观名副其实,这也造就了它”出了名的慢性子”,无论是哪种情况,哪怕原数组已排序完成,它也将花费将近n²/2次遍历来确认一遍。

       即便是这样,它的排序结果也还是不稳定的。 唯一值得高兴的是,它并不耗费额外的内存空间。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值