public class SelectSort {
public SelectSort(int a[]) //简单插入排序 本质上就是两层循环的遍历
{
/*过程很简单,就是每一遍遍历都要找出一个剩下的最小,比如第一次遍历找最小的 放在第一位
第二次遍历就找第二小的,依次类推
* */
int min=0;
for(int i=0;i<a.length;i++){ //遍历数组
min=a[i];
int index=i; //存储最小的那个数的下标,这里为i可以保证如果没有交换的话*号处a[i]的值不会改变
for(int j=i+1;j<a.length;j++) //从第i个开始就是没有排序的数据,要比较就从i+1个开始比较
{
if(a[j]<min)
{
min=a[j]; //存储最小值和下标
index=j;
}
}
a[index]=a[i]; //✳ 交换数据
a[i]=min;
}
}
public static void main(String[] args) {
int a[] = new int[100];
for (int i = 0; i < a.length; i++) //产生0-10001的数组
a[i]=(int)(Math.random()*1000+1);
//int a[] = {1, 6, 23,21};
new SelectSort(a);
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
}
一次过程如图所示(不完整):
时间复杂度:从以上代码可以看出,无论是哪种最优最坏情况,都是执行两层for循环,故时间复杂度是O(n²)