选择排序原理
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
这里说下我对选择排序的理解:
比如说一组数我们需要对其进行排序,我们先假定第一个数就是最小的,记下它的编号,然后我们的目光就往后面看找找有没有比它还小的数,然后找呀找,突然发现其中有一个数比它还小,然后我们就知道了原来它不是最小的啊,然后在心里把当初默认最小的那个数的编号改成这个数的编号,然后又继续寻找,结果又发现更小的数,那么依旧把自己心里最小数的编号改成这个数的编号,当所有的数都看了一遍的时候,我们心里已经知道最小数的编号了,然后我们和当初认定的最小数的编号做对比,如果编号不一样说明最小的数并不是我们当初记得那个数,所以我们就交换一下这两个数得位置,这样我们就找到最小得数了,然而剩下的数还没排序呢呀,那我们就继续假定第二个数是最小得,然后步骤就和第一次一样了,最终我们就所有得数按从很小到大的顺序排好了。
Python代码实现
def sort_select(sort_list):
for i in range(len(sort_list) -1):
min = i
for j in range(i + 1, len(sort_list)):
if sort_list[min] > sort_list[j]:
min = j
if min != i:
sort_list[i],sort_list[min] = sort_list[min],sort_list[i]
C++代码实现
//两数交换
void swapInt(int *num1,int *num2){
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void selectSort(int *list,int len){
for (int i = 0; i < len -1; i++) {
int max = i;
for (int j = i+1; j < len; j++) {
if(list[j] > list[max]){
max =j;
}
}
if (max != i){
swapInt(&list[max],&list[i]);
}
}
}