package com.pan;
import java.util.Scanner;
public class InsertSort {
public static long starttime;
public static long endtime;
//返回每趟找到的最小数位置
static int selectMini(int a[],int i) {
int k=i;
for(int j=i+1;j<a.length;j++) {
if(a[j]<a[k]) {
k=j;
}
}
return k;
}
//从小到大排序 选择排序
//1.每趟找到最小的数
//2.和对应趟数的位置交换 如第一趟找到的数就和数据序列的第一个位置交换 第二个就和第二趟 依次。。。。。
static void selectSort(int a[],int n)
{
for(int i=0;i<a.length;i++) {
int k=selectMini(a,i);//最小数位置
int min=a[k];//最小数
int t=a[i];
a[i]=min;
a[k]=t;
}
}
//排序后的数
public static void sortAfter(int b[]) {
System.out.println("\n排序后的数是:");
for(int i:b) {
System.out.println(i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int i=0;
int k;
System.out.println("輸入數組大小");
int a[]=new int[sc.nextInt()];
System.out.println("請錄入數據,輸入-1代表輸入結束");
while(++i<a.length&&(k=sc.nextInt())!=-1) {
a[i]=k;
}
//int a[]= {3,63,45,8,46,4,57,5,3,58,89,10,23,12,54,67,86,45,45,34,67,89,78,79,456,345,21,45,67,456};//測試原数据序列
int b[]=new int[a.length];
b[0]=a[0];
starttime=System.currentTimeMillis();
//选择排序
InsertSort.selectSort(a,0);
InsertSort.sortAfter(a);
endtime=System.currentTimeMillis();
System.out.println("共用時間: "+(endtime-starttime));
}
}
package com.pan;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class InsertSort {
public static long starttime;
public static long endtime;
//返回每趟找到的最小数位置
static Map selectMini(int a[],int i) {
int k=i;
int m=i;
Map map=new HashMap();
for(int j=i+1;j<a.length-i;j++) {//查找时间缩小了一半
if(a[j]<a[k]) {
k=j;
}else if(a[j]>a[m]){
m=j;
}
}
map.put("min", k);
map.put("max", m);
return map;
}
//从小到大排序 选择排序
//1.每趟找到最小的数
//2.和对应趟数的位置交换 如第一趟找到的数就和数据序列的第一个位置交换 第二个就和第二趟 依次。。。。。
static void selectSort(int a[],int n)
{
for(int i=0;i<a.length/2;i++) {
Map map=selectMini(a,i);
int k=Integer.parseInt(map.get("min").toString());//最小数位置
int m=Integer.parseInt(map.get("max").toString());//最大数位置
int min=a[k];//最小数
int t=a[i];
a[i]=min;
a[k]=t;
int max=a[m];//最大数
int t1=a[(a.length-1)-i];
a[(a.length-1)-i]=max;
a[m]=t1;
}
}
//排序后的数
public static void sortAfter(int b[]) {
System.out.println("\n排序后的数是:");
for(int i:b) {
System.out.println(i);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int i=0;
int k;
System.out.println("輸入數組大小");
int a[]=new int[sc.nextInt()];
System.out.println("請錄入數據,輸入-1代表輸入結束");
while(i<a.length&&(k=sc.nextInt())!=-1) {
a[i++]=k;
}
//int a[]= {3,63,45,8,46,4,57,5,1,58,89,10,23,12,54,67,86,45,45,34,67,89,78,79,456,345,21,45,67,456};//測試原数据序列
int b[]=new int[a.length];
b[0]=a[0];
starttime=System.currentTimeMillis();
//选择排序
InsertSort.selectSort(a,0);
InsertSort.sortAfter(a);
endtime=System.currentTimeMillis();
System.out.println("共用時間: "+(endtime-starttime));
}
}