选择排序Java实现

相关特点

  • 最好最坏时间复杂度O(n2)
  • 空间复杂度O(1)
  • 不稳定
  • 数据规模越小越好。

基本思想

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

算法描述

  • 给定数组:int[] arr={里面n个数据};下标从1开始
  • 1排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arr[1]交换
  • 2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与arr[2]交换
  • 以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与arr[i]交换,直到全部排序完成。

举例说明

数组 int[] arr={5,2,8,4,9,1};

-------------------------------------------------------

第一趟排序: 原始数据:5  2  8  4  9  1

最小数据1,把1放在首位,也就是15互换位置,

排序结果:1  2  8  4  9  5

-------------------------------------------------------

第二趟排序:

1以外的数据{2  8  4  9  5}进行比较,2最小,

排序结果:1  2  8  4  9  5

-------------------------------------------------------

扫描二维码关注公众号,回复: 2230204 查看本文章

第三趟排序:

12以外的数据{8  4  9  5}进行比较,4最小,84交换

排序结果:1  2  4  8  9  5

-------------------------------------------------------

第四趟排序:

除第124以外的其他数据{8  9  5}进行比较,5最小,85交换

排序结果:1  2  4  5  9  8

-------------------------------------------------------

第五趟排序:

除第1245以外的其他数据{9  8}进行比较,8最小,89交换

排序结果:1  2  4  5  8  9


代码实现(下标从0开始

package Sort;

public class SelectSort {
	public static void sort(long[] arr) {
		int k = 0;//指向最小的值
		long temp = 0;
		for (int i = 0; i < arr.length - 1; i++) { //i表示已经排序好的有几个了
			k=i;                                   //k刚开始指向的是每次循环开始的位置
			for (int j = i; j < arr.length; j++) { //j从i开始循环遍历各元素
				if (arr[j] < arr[k]) {             //判断j所对应的值小于k所对应的值
					k=j;                           //k指向j,到最后k会指向最小的值
				}
			}
			temp = arr[i];                         //最小值与当前趟最开始的位置i交换位置
			arr[i] = arr[k];
			arr[k] = temp;
		} 
	}
	
	public static void main(String[] args) {
		long[] arr = new long[]{5,2,8,4,9,1};
		sort(arr);
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.print("]");
	}

}


猜你喜欢

转载自blog.csdn.net/hd12370/article/details/81042718