package dateRank;
/*
*
* 数组排序的方法
* 1.选择排序(简单排序), 2,插入排序, 3,冒泡排序(非常普遍的) 4.归并排序 5.快速排序 6 希尔排序 7 堆排序
*
*
* 1.选择排序
* 选择排序是一种简单直观的排序算法!
*
*其基本的原,理如下:二层循环模式
*
* 数组 : a [38 ,65 ,97 ,76 ,13 ,27 ,49]
* 0 1 2 3 4 5 6
*
*
* 设第一个数为参照物 a{0} 38
* 比一圈后 13最小 为第
* 13 65 97 76 38 27 49
*
* 下一圈
* 13 27 97 76 38 65 49
*
* 下一圈
* 13 27 38 76 97 65 49
*
* 下一圈
* 13 27 38 65 97 76 49
*
* 13 27 38 49 65 76 97
*
*
*
*
*
* 13-27 , -97 , -----76 , -----38 , -----65 , -----49
* -----13 , -----27 , -----38 , -----76 , -----97 , -----65 , -----49
* 13 , 27 , 38 , 49 , 65 , 76 , 97 ,
*
* 对于给定的一组记录,经过第一轮比较后得到,最小的记录,然后,将该记录与第一次记录的位置
* 进行交换,接着,对不包括第一个记录以外的其他记录进行第二轮的比较。一直将数据循环得到
*/
public class SelectionSort {
public static void main(String[] args) {
//自定义一个数组
int a[]={38,65,97,76,13,27,49}; //(靶子)
//遍历循环数组
for(int i=0;i
System.out.print(a[i]+" ");
}
// 将数组重新赋值计算
selectSortMin(a);
/*selectSortMax(a);
//第二次遍历循环数组
System.out.println("--------------输出结果--------------");
for(int i=0;i
System.out.print(a[i]+" ");
}*/
}
// 数组简单排序算法
public static void selectSortMin(int[] a){
System.out.println("进入到selectSortMin()中:");
int i=0; //最外层赋值, 用于for 循环
int j=0; //最里层的一个初始值
int temp=0;//用于储存 最小值,临时数据 中间传递值 (中介值,用完了就作废了)
int flag=0;// 用于标记 最小值, 数组下标 中间临时标记下标
int n=a.length; //数组的长度
for(i=0;i
// 第一次遍历,就是将数组 每个值都遍历出来
System.out.println("第"+i+"次循环");
temp=a[i];//设这个临时值temp 为数组的初值
System.out.println("temp"+temp);
flag=i;
//循环一个周期 n次
for(j=i+1;j
if(a[j]
/*
* 如果 此数组a[j] 小于 这个临时值,将数组的值,赋值给临时值temp
* 将数组下标赋值给 flag
*/
temp=a[j];
flag=j; //记录最小值的坐标
System.out.println("j 数组下标:"+j);
}
}
System.out.println(a[i]);// 此时还没有进行变化。赋值操作
System.out.println("此时的I:"+i);
//如果标记的下标不等于数组应该的下标,则进行赋值操作
// 每次替换,只是和最小的值进行替换
// 最小值和循环数组值对调
if(flag!=i){
a[flag]=a[i];//将此时数组的值,替换成标记下标,将临时值赋值给当前数组下表
a[i]=temp;
}
for(int m=0;m
System.out.print("-----"+a[m]+" , ");
}
}
}
public static void selectSortMax(int[] a){
System.out.println("进入到selectSortMax()中:");
int i=0;
int j=0;
int temp=0;
int flag=0;
int n=a.length;
for(i=0;i
System.out.println("第"+i+"次循环");
temp=a[i];//设这个临时值temp 为数组的初值
flag=i;
//循环一个周期 n次
for(j=i+1;j
if(a[j]>temp){
/*
* 如果 此数组a[j] 小于 这个临时值,将数组的值,赋值给临时值temp
* 将数组下表赋值给 flag
*/
temp=a[j];
flag=j;
System.out.println("j"+j);
}
}
System.out.println(a[i]);
//如果标记的下标不等于数组应该的下标,则进行赋值操作
if(flag!=i){
System.out.println("数组 最小值 下标"+flag);
a[flag]=a[i];//将此时数组的值,替换成标记下标,将临时值赋值给当前数组下表
a[i]=temp;
}
}
}
}