排序算法--选择排序
动态演示
个人笔记
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。
首先在未排序的序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
Java代码实现
package com.guo;
public class Test {
public static void main(String[] args) {
//选择排序
int[] num={8,3,4,7,2,1,11,22,3,5,18,22};
num=quickSort(num);
for(int a:num) {
System.out.print(a+"\t");
}
}
public static int[] quickSort(int[] num){
for(int i=0;i<num.length-1;i++) {
//找出没有排过序的元素中的最小(最大)值及其位置。
//然后将这个最值放在正确的位置上
//每一轮的最值都不一样,例如本次用的数组。
//第一轮,最小是1,放在【0】。第二轮是2,放在【1】。第三轮是3,放在【2】。第四轮是3,放在【3】。
// 先假设i处的元素就是最小的,让比大小也有个最初的基准
// 此处记住下标和最值,其实只需记住下标即可,最值可以用 num[index] 的方式表示,这样能节省存储空间
int index=i;
int min=num[i];
//(1)找最值,此处找的是最小
for(int j=i+1;j<num.length;j++) {
if(min>num[j]) {
min=num[j];
index=j;
}
}
//判断这个最值是否在正确的位置上,不在就交换
if(index!=i) {
int temp=num[i];
num[i]=num[index];
num[index]=temp;
}
}
return num;
}
}
Python代码实现
A = [8,3,4,7,2,1,11,22,3,5,18,22]
for i in range(len(A)):
min_idx = i
for j in range(i + 1, len(A)):
if A[min_idx] > A[j]:
min_idx = j
A[i], A[min_idx] = A[min_idx], A[i]
print("排序后的数组:")
for i in range(len(A)):
print("%d" % A[i],end=" ")