选择排序

一. 算法描述

    选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。

以下面5个无序的数据为例:

56 12 80 91 20(文中仅细化了第一趟的选择过程)

第1趟:12 56 80 91 20


第2趟:12 20 80 91 56

第3趟:12 20 56 91 80

第4趟:12 20 56 80 91

二. 算法分析

平均时间复杂度:O(n2)

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

稳定性:不稳定 (比如序列【5, 5, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)

三. 算法实现


  1. public class ChoseSort {  
  2.     //constructor without parameters  
  3.     public ChoseSort(){};  
  4.       
  5.     //constructor with parameters  
  6.     public int[] ChoseSort(int[] intArr){  
  7.         for(int i=0;i<intArr.length;i++){  
  8.             int lowIndex = i;  
  9.               
  10.             for(int j=i+1;j<intArr.length;j++){  
  11.                 if(intArr[j]<intArr[lowIndex]){  
  12.                     lowIndex = j;  
  13.                 }  
  14.             }  
  15.               
  16.             //将当前第一个元素与它后面序列中的最小的一个 元素交换,也就是将最小的元素放在最前端  
  17.             int temp = intArr[i];             
  18.             intArr[i] = intArr[lowIndex];  
  19.             intArr[lowIndex] = temp;  
  20.         }  
  21.           
  22.         return intArr;  
  23.     }  
  24.       
  25.     public static void main(String[] args) {  
  26.         ChoseSort choseSort = new ChoseSort();  
  27.         int[] intArr = {5,6,9,2,4,3,8};  
  28.         int[] intArrAfterSort = choseSort.ChoseSort(intArr);  
  29.         for(int arrItem:intArrAfterSort){  
  30.             System.out.print(arrItem+" ");  
  31.         }  
  32.     }  


</pre><pre code_snippet_id="640602" snippet_file_name="blog_20150410_2_4944069" id="best-answer-content" class="reply-text mb10" name="code" style="word-wrap: break-word; background-color: rgb(255, 255, 255);"> 打印结果:
10 13 14 27 38 49 65 76 97
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值