排序之选择排序

     选则排序算法是排序算法中最简单的一种,这种排序算法只需要经历两次循环就可以成功完成排序,但是,这种排序算法的可行性也需要考虑,因为时间复杂度达到了O(n^2)。

     我们首先看看选择排序的基本思想:第一趟从n个元素中选取最小的作为第一个元素,第二趟从剩余的n-1个元素中选取最小的作为第二个元素,一直重复这个步骤直到最后一个元素。

    简单选择排序的伪代码描述如下:

selectionSort(a[0...n-1]){
//用选择排序算法对数组a[0...n-1]进行排序
//输入:可排序数组a[0...n-1]
//输出:有序数组a[0...n-1]
    for i←0 to n-1      //控制循环次数
         j←selectMinKey(a[i...n-1]);  //选出剩余元素的最小值,将其赋给a[i]
         a[i]↔a[j];

}
int selectMinKey(a[0...n-1]){
//选取数组a[0...n]中最小值得下标
//输入:数组a[0...n]
//输出:数组a[0...n]中最小值得下标j
      j←0;
      for i←0 to n-1
          if a[i]<=a[j]   j←i;
      return j;

}

      这个算法中有两层循环,外层循环主要控制循环次数,内层循环主要是选出最小值。
      这个算法简单是简单,可是时间复杂度达到了O(n^2),前辈们在不断改进这个算法的过程中发明了树形选择排序,以及后来进一步衍生出堆排序。

package com.poe.sort;

import java.util.Scanner;

/**
 * 选择排序
 * @author Sam
 *
 */

public class SelectSort {
	private static int[] array;	//要排序的数组,由命令行输入
	
	/**
	 * 选出从指定位置开始到数组结束的最小值,并返回其下标
	 * @param a要搜索的数组
	 * @param start开始位置
	 * @return 返回最小值对应的下标
	 */
	public static int selectMinKey(int[] a,int start){
		int j = start;	//用来保存比较时较小的下标,开始时就是开始位置
		for(int i = start;i
    
    
     
     =a[i]){
				j = i;
			}
		}
		return j;	//返回最小值对应的下标
	}
	
	/**
	 * 用选择排序算法对数组进行排序
	 * 选择排序算法:第i趟排序从n-i+1个数中选出最小值,将之与第i个元素交换位置,
	 * 这样进行n趟
	 * @param a表示待排序数组名
	 */
	public static void selectSort(int[] a){
		for(int i=0;i
     
     
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值