介绍
快速排序英文名为SelectSort 从数组中找到最小的放到前边
基本思路
1、默认待排序数组中第一个作为最小值 2、找待排序数组(注意不是整个数组哦)中真正的最小值 3、找到真正的最小值和待排序数组第一个数据进行交换,真正的最小值到达正确位置 4、重复1、2、3
代码
< ! -- -- java-- -- ->
public static void main ( String [ ] args) { int [ ] arr = { 10 , 2 , 8 , 3 , 1 } ; sort ( arr) ; System . out. println ( Arrays . toString ( arr) ) ; } public static void sort ( int [ ] arr) { for ( int i= 0 ; i< arr. length; i++ ) { int minIndex = i; for ( int j= i+ 1 ; j< arr. length; j++ ) { if ( arr[ j] < arr[ minIndex] ) { minIndex = j; } } if ( i!= minIndex) { int temp = arr[ i] ; arr[ i] = arr[ minIndex] ; arr[ minIndex] = temp; } } } < ! -- -- -- -- -- -- -- -- -- -- -- -- >
运行结果;
[ 1 , 2 , 3 , 8 , 10 ]
< !- - - - python- - - - - >
def selectSort ( arr) : for i in range ( len ( arr) ) : min = i; for j in range ( i+ 1 , len ( arr) ) : if ( arr[ j] < arr[ min ] ) : min = j; arr[ i] , arr[ min ] = arr[ min ] , arr[ i] ; return arr; arr = [ 10 , 2 , 8 , 3 , 1 ]
print ( selectSort( arr) )
< !- - - - - - - - - - - - - - - - - - - - - - - - >
运行结果;
[ 1 , 2 , 3 , 8 , 10 ]
没明白?老规矩,上图
复杂度
时间复杂度为:O(n^2) 空间复杂度:O(1) 它是非稳定排序 原地排序
推荐博客:
还没看懂?那一定是我写的问题,推荐两篇文章 冰狼爱魔-十大经典排序算法 涛声依旧-选择排序