对一组数据进行选择排序的方法是,在一组数据中找到最小的,排到第一位,然后从剩下的数据中找到第二个小的,排到第二位,逐次排序完成。
比如:3 ,7 ,9 ,10, 0这一组数据:
第一次排序:3,7,9,0,10,将最小的0排到第一位,3和0的位置交换,为0,7,9,3,10,然后未排序的数据为7,9,3,10,对未排序的数据继续进行选择排序
第二次排序:7,9,3,10,将最小的3排到第二位,7和3的位置交换,为0,3,9,7,10,然后未排序的数据为9,7,10,对未排序的数据继续进行选择排序
第三次排序:9,7,10,将最小的7排到第三位,7和9的位置交换,为0,3,7,9,10,然后未排序的数据为9,10,对未排序的数据继续进行选择排序
第四次排序:9,10,将最小的9排到第四位,然后未排序的数据为10,对未排序的数据继续进行选择排序。
第五次排序,10为最小的,排在第5位,排序完成。
数据对于C/C++来说存储在数组中,python存储在列表中,排序过程完全一样。
比较冒泡排序和选择排序,两者均经过两个循环,复杂度是一样的,均为O(n^2)。
C++代码:
# include <iostream>
using namespace std;
#define TEST_ARRAY_LEN 7
void select_sort(int test[], int len)
{
int i,j, min, min_k;
if(len > TEST_ARRAY_LEN)
{
return;
}
for(i = 0; i < len; i++)
{
min = test[i];
min_k = i;
for(j = i; j < len; j++)
{
if(test[j] < min)
{
min = test[j];
min_k = j;
}
}
test[min_k] = test[i];
test[i] = min;
}
return;
}
void main()
{
int test[TEST_ARRAY_LEN] = {2,5,1,6,7,3,4};
select_sort(test, TEST_ARRAY_LEN);
for (int i =0; i < TEST_ARRAY_LEN; i++)
{
cout << test[i] << " ";
}
cout << endl;
}
python实现:
#!/usr/bin/python
# -*- coding: utf-8 -*-
def select_sort(list, n):
if (n > len(list)):
return
for i in range(0, n):
min = list[i]
min_k = i
for j in range(i, n):
if list[j] < min:
min = list[j]
min_k = j
list[i], list[min_k] = list[min_k], list[i]
return list
a = [1,4,5,7,3,2,6,3,9]
print select_sort(a,len(a))