//选择排序:从数组中找到最小的放到第一个位置,然后再在剩余元素中找最小的放第二个位置,依次类推
//关键:两层循环,在第一层循环中保存最小元素,在第二层循环中找到最小元素(位置)
//双重循环,事件复杂度平均O(N*N),空间复杂度1
import java.util.*;
import java.io.*;
class SelectSort{
void sort(int[] arr){
for (int i=0;i<arr.length;i++){
int index=i;//注意在此处将i赋值给index,i为当前剩余元素的首位
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[index]){//关键是记录位置
index=j;//index指向当前最小数位置,这里必须记录位置,因为下次if要用index
}
}
//关键,在此处保存
int tem=arr[i];//保存当前首位元素
arr[i]=arr[index];//将当前最小数放到当前首位
arr[index]=tem;//将原来首位的元素放到别处
}
}
public static void main(String[] args){
int[] arr={4,3,12,5,2,7};
SelectSort A=new SelectSort();
A.sort(arr);
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//插入排序:构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。
//插入排序效率的最好情况运行时间为O(n);插入排序最坏情况运行时间和平均情况运行时间都为O(n2)。空间复杂度O(1)
import java.util.*;
import java.io.*;
class InsertSort{
void sort(int arr[]){//---------核心代码,位置的查找与移位
for(int i=0;i<arr.length-1;i++){
int j=i+1;
int temp=arr[j];//第j个待排元素
while(j>0 && temp<arr[j-1]){
arr[j]=arr[j-1];//没找到位置,第j-1个元素后移到第j位
j--;//继续向前查找
}
arr[j]=temp;//找到位置,把待排元素放在此处
}
}
public static void main(String[] args){
int[] arr={4,3,12,5,2,7};//测试数据
InsertSort A=new InsertSort();
A.sort(arr);
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
}