Java排序算法之简单选择排序
基本思想
简单选择排序的基本思想非常简单,即:第一趟,从 n 个元素中找出关键字最小的元素与第一个元素交换;第二趟,在从第二个元素开始的 n-1 个元素中再选出关键字最小的元素与第二个元素交换;如此,第 k 趟,则从第 k 个元素开始的 n-k+1 个元素中选出关键字最小的元素与第 k 个元素交换,直到整个序列按关键字有序。
算法原理
接选择排序的第一趟处理是从数据序列所有n个数据中选择一个最小的数据作为有序序列中的第1个元素并将它定位在第一号存储位置,第二趟处理从数据序列的n-1个数据中选择一个第二小的元素作为有序序列中的第2个元素并将它定位在第二号存储位置,依此类推,当第n-1趟处理从数据序列的剩下的2个元素中选择一个较小的元素作为有序序列中的最后第2个元素并将它定位在倒数第二号存储位置,至此,整个的排序处理过程就已完成。
源码
package com.algorithm.sorting;
/**
* 选择排序
* @author Administrator
*
*/
public class SelctionSort {
public static void select_sort(int array[]) {
System.out.print("要排序的数组:");
for (int a = 0; a < array.length; a++) {
System.out.print(array[a] + "\t");
}
System.out.println("");
for (int i = 0; i < array.length - 1; i++) {//作array.length - 1 趟选取
int minIndex = i;
for (int j = i + 1; j < array.length; j++) {//选择关键字最小的元素
if (array[j] < array[minIndex]) {//对数据遍历,寻找最小的数据元素的数组下标
minIndex = j;
}
}
if (minIndex != i) {//关键字最小的元素与元素array[i]交换
//对i和minIndex进行比较,如果不相等,则i和minIndex下标表示的元素不是同一个元素,则交换array[i],array[minIndex]的值,保证最小值总在最前面
int temp = array[i];
array[i] = array[minIndex];
array[minIndex] = temp;
}
System.out.print("第" + (i + 1) + "次排序结果:");
for (int a = 0; a < array.length; a++) {
System.out.print(array[a] + "\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for (int a = 0; a < array.length; a++) {
System.out.print(array[a] + "\t");
}
}
public static void main(String[] args) {
int array[]={100,30, 99,-1,53,20};
select_sort(array);
}
}
源码解析
要排序的数组:100 30 99 -1 53 20
第1次排序结果:-1 30 99 100 53 20
第2次排序结果:-1 20 99 100 53 30
第3次排序结果:-1 20 30 100 53 99
第4次排序结果:-1 20 30 53 100 99
第5次排序结果:-1 20 30 53 99 100
最终排序结果:-1 20 30 53 99 100
在长度为6的无序数组中,
第一次遍历6个数,找到最小的数值与第一个元素交换;
第二次遍历5个数,找到最小的数值与第二个元素交换;
第三次遍历4个数,找到最小的数值与第三个元素交换;
第四次遍历3个数,找到最小的数值与第四个元素交换;
第五次遍历2个数,找到最小的数值与第五个元素交换,排序完成。
效率分析
简单选择排序的主要操作是元素间的比较操作.
空间效率:显然简单选择排序只需要一个辅助空间。
时间效率:在简单选择排序中,所需移动元素的次数较少,在待排序序列已经有序的情况下,简单选择排序不需要移动元素,在最坏的情况下,即待排序序列本身是逆序时,则移动元素的次数为 3(n-1)。然而无论简单选择排序过程中移动元素的次数是多少,在任何情况下,简单选择排序都需要进行n(n-1)/2 次比较操作,因此简单选择排序的时间复杂度为
O(n2)
Ο
(
n
2
)
。
总结
选择排序选择类排序中最简单的一种算法。简单选择排序的主要操作是元素间的比较操作,改进简单选择排序应从减少元素比较次数出发。改进后的选择类排序算法称之为树型选择排序。
写博客是为了帮助开发者学习使用技术,同时巩固自己所学技术。如果此篇博客有助于您的学习,那是我的荣幸!如果此篇博客有任何瑕疵,请多多指教!在此感谢您的学习和指教!