Java排序算法之简单选择排序

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 )

总结

选择排序选择类排序中最简单的一种算法。简单选择排序的主要操作是元素间的比较操作,改进简单选择排序应从减少元素比较次数出发。改进后的选择类排序算法称之为树型选择排序。
写博客是为了帮助开发者学习使用技术,同时巩固自己所学技术。如果此篇博客有助于您的学习,那是我的荣幸!如果此篇博客有任何瑕疵,请多多指教!在此感谢您的学习和指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值