Hello大家好,我是小木,今天分享的是常用排序算法中的选择排序,其余排序算法也会陆续更新的。对于每种算法我尽量用最直观的方法方便大家理解,代码呢我使用了C++与python两种较为常用语言,下面让我们开始吧!
选择排序顾名思义就是要对乱序数列中的数字不断进行选择,从而使之达到整体有序的一种方法,在选择数字的时候可以挑选当前乱序数列中的最大值或最小值放到有序数列中,并将其从乱序数列中去除。
例如现在有一个待排序数列为:
我们想要将其变成升序数列,即从小到大排列,那么首先选择出当前的最小值为2,将其放置到有序序列中(在实际编程中我们可以将其与数组中的第一个元素进行交换,就不用额外申请空间了)。
然后我们再次对无序数列重复这一过程,挑选出的数字依次为4,5,8,13,14,19,21,71。过程如下图所示:
Python代码如下:
"""
排序算法
---小木
"""
def straight_select_sort(number_list):
"""
选择排序
i ---当前排序到了第几个数字
j ---当前的乱序数列从第几个数字开始
min_index ---第i次排序中记录最小值的下标
"""
for i in range(len(number_list)-1):
min_index = i
for j in range(i+1, len(number_list)):
if number_list[j] < number_list[min_index]:
min_index = j
number_list[min_index], number_list[i] = number_list[i], number_list[min_index]
print(number_list)
if __name__ == '__main__':
# 待排序数列
number_list = [5, 2, 13, 8, 19, 21, 71, 4, 14]
#选择排序
straight_select_sort(number_list)
C++代码如下:
#include<iostream>
using namespace std;
void straightSelectSort(int numberList[], int listLen){
int minIndex, tempNumber;
for(int i=0; i<listLen-1; i++){
minIndex = i;
for(int j=i+1; j<listLen; j++){
if(numberList[j] < numberList[minIndex])
minIndex = j;
}
tempNumber = numberList[minIndex];
numberList[minIndex] = numberList[i];
numberList[i] = tempNumber;
}
for(int i=0; i<listLen; i++){
cout << numberList[i] << " ";
}
}
int main(){
int numberList[9] = {5, 2, 13, 8, 19, 21, 71, 4, 14};
straightSelectSort(numberList, 9);
}
看完觉得有帮助的同学点个赞吧~