码迷,mamicode.com
首页 > 编程语言 > 详细

Java-选择排序算法

时间:2017-10-11 00:35:18      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:size   string   system   pac   描述   索引   class   自己   算法   

我一定要掌握一些基本的排序算法,对,没错,说到做到,今天学习了选择排序算法。

 

一、算法描述

首先找到数组中的最小的那个元素,把它和数组的第一个元素位置交换(如果第一个元素是最小元素那么它就和自己交换)。在剩下的元素中找到最小的元素,将它和第二个元素交换位置,如此重复,正道将整个元素排序完成,这种叫做选择排序,就是不断地徐泽剩下元素中的最小者。

 

举个栗子:

原数组:5, 2 , 9 , 6 , 3(第一趟选择最小数进行交换)

第一趟:2, 5 , 9 , 6 , 3

第二趟:2, 3 , 9 , 6 , 5

第三趟:2, 3 , 5 , 6 , 9

第四趟:2, 3 , 5 , 6 , 9

 

 

二、算法复杂度分析

平均时间复杂度:O(n^2)

空间复杂度:O(1)(用于交换和记录索引)

稳定性:不稳定(如[5 , 5 , 3]第一趟将5和3交换,倒置第一个5挪到第二个5后面)

 

 

三、算法实现(NO BB Show Your Code)

 

 1 package cn.zpoor.Test;
 2 /**
 3  * @author 薛定谔的猫
 4  * 选择排序实现*/
 5 public class Selection {
 6     public static void main(String[] args) {
 7         int[] arr = {5,2,9,6,3};
 8         System.out.println("选择排序之前:");
 9         for(int num:arr) {
10             System.out.print(num+ " ");
11         }
12         
13         //选择排序的优化
14         for(int i = 0;i<arr.length-1;i++) {
15             int k = i;//记录值
16             for(int j = k+1;j<arr.length;j++) {//选最小的索引值
17                 if (arr[j]<arr[k]) {
18                     k = j;//记录找到的最小值的索引值
19                 }
20             }
21             //内层循环结束后,找到本轮最小的数之后,进行交换
22             if (i!=k) {
23                 //交换位置
24                 int temp = arr[i];
25                 arr[i] = arr[k];
26                 arr[k] = temp;
27             }
28         }
29         System.out.println();
30         System.out.println("选择排序之后:");
31         for(int num:arr) {
32             System.out.print(num + " ");
33         }
34     }
35 }
36 /*
37 选择排序之前:
38 5 2 9 6 3 
39 选择排序之后:
40 2 3 5 6 9 */

 

睡觉。

Java-选择排序算法

标签:size   string   system   pac   描述   索引   class   自己   算法   

原文地址:http://www.cnblogs.com/zpoor/p/7648430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!