思路
整个待排序数组分为【已排序】+【待排序】两个部分。每次从【待排序】中选出最大/小的,添加到【已排序】中。
实验过程
python版
# -*- coding: utf-8 -*-
"""
Created on Sat Sep 30 10:35:05 2017
@author: GW
"""
#从小到大排序
lists = [12, 5, 13, 13, 11, 6, 8]
def select_sort(lists):
#i=[0,1,2,……,len(lists)-2],第一个到倒数第二个
for i in range(len(lists)-1):
minIndex = i
#从第i个元素开始找,一直找到尾,找到最小的
for j in range(i,len(lists)):
if lists[j]<lists[minIndex]:
minIndex=j
#把此轮找到的最小的放到前面
lists[i],lists[minIndex]= lists[minIndex],lists[i]
print("排序前:",lists)
select_sort(lists)
print("排序后:",lists)
结果
java版
package tmp;
/**
*@author ckw
*@version time:2017年9月30日 上午10:09:21
*/
public class SelectSort
{
public static void sortInsert(int[] lists)
{
for (int i = 0; i < lists.length-1; ++i)
{
int minIndex = i;
for (int j = i; j <lists.length; ++j)
if (lists[j] < lists[minIndex])
minIndex=j;
int tmp=lists[minIndex];
lists[minIndex]=lists[i];
lists[i]=tmp;
}
}
public static void main(String[] args)
{
int[] lists = { 12, 5, 13, 13, 11, 6, 8 };
System.out.println("排序前");
for (int i = 0; i < lists.length; ++i)
{
System.out.print(lists[i] + " ");
}
System.out.println("");
sortInsert(lists);
System.out.println("排序后:");
for (int i = 0; i < lists.length; ++i)
{
System.out.print(lists[i] + " ");
}
}
}
结果
讨论
优点:思路很简单,理解容易
缺点:时间复杂度太高,O(n*n),不适合大规模排序。