思路
首先,找到数组中最小的元素,拎出来,将它和数组的第一个元素交换位置,第二步,在剩下的元素中继续寻找最小的元素,拎出来,和数组的第二个元素交换位置,如此循环,直到整个数组排序完成。
至于选大还是选小,这个都无所谓,你也可以每次选择最大的拎出来排,也可以每次选择最小的拎出来的排,只要你的排序的手段是这种方式,都叫选择排序
我的理解:
类似双指针:外层指针,内层指针。
外层指针: 负责控制遍历。每次遍历时均认为该指针对应的值为最小值。
内层指针: 负责遍历外层指针所对应的元素之后的所有元素,找到最小的元素。找到最小元素之后,与外层指针所对应的元素进行交换。
内外层指针都是元素的下标
代码实现
python代码实现
def SelectionSort(listArr:list):
num=len(listArr)
for i in range(num-1): #外层控制遍历
min_index=i
for j in range(i+1,num):
if litArr[min_index]>listArr[j]:
min_index=j
#找到最小元素的下标后,开始交换素。
listArr[i],listArr[min_index]=listArr[min_index],listArr[i]
return listArr
c#代码
namespace SelectionSort
{
class Program
{
static void Main(string[] args)
{
int[] Arr = new int[] { 8,2,5,9,7};
SelectionSort(Arr);
foreach (int item in Arr)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
public static void SelectionSort(int[] Arr)
{
int min_index = 0; //最小元素的小标
for (int i = 0; i < Arr.Length-1; i++) //外层控制循环
{
min_index = i;
for (int j = i+1; j < Arr.Length; j++)
{
if (Arr[min_index]>Arr[j])
{
min_index = j; //更新最小元素的下标
}
}
int temp = Arr[i];
Arr[i] = Arr[min_index];
Arr[min_index] = temp;
}
}
}
}
以上代码测试正常。
如有不妥之处,敬请指正,谢谢。