/* 需求:给给定的数组排序,使数组递增排列,数组{7,3,2,0,6,4,8,1,5,9},依次输出排序前和排序后的数组元素;
方法:选择排序
思路:
1.定义一个功能,给该数组进行排序,使用一个函数;
2.将第一个元素和其他元素进行一一比较,如果大于与之相比较的元素,
则交换两个元素的位置,这样进行一趟比较,就能将最小的元素排在0号角标
的位置,然后将第二个元素和它后面的元素进行一趟比较,就能将次小的元素排在
1号角标的位置,依次反复下去,可以进行9趟比较,所有元素呈现递增排列,最后一个元素自动站对位置,
至此,排序结束;趟数逐次递减,*使用for循环,控制趟数,这是外循环,
内循环控制每一个趟的比较次数,循环体使用判断语句,完成比较*;
3.定义一个功能,输出数组中的每一个元素;
步骤:
1.写出排序功能函数:无输出结果,输出类型为void,因为排序是操作堆内存中的元素,
最后输出的还是堆内存中的元素,参数是目标数组;
2.写出数组输出函数:无输出结果,输出类型为void,参数为目标数组;
3.主函数中多次调用上面的两个函数,便可达到需求;
*/
public static void selectsort(int[] arr) {
for (int x = 0;x < arr.length ;x ++ )
//使用arr.length使得代码可以复用,通用性提高,也就说对于任意给出的一个数组进行排序,
//只需调用该函数即可;
{
for (int y = x+1 ;y <arr.length ;y ++ )
//易错点:y的控制条件与x一样,都是小于arr.length - 1,那最后一个元素就不能参加比较了,导致结果可能性错误;
//优化代码:使用y = x + 1,使得当前选择元素第一次和它的后一个元素比较大小,从而避免和自己作没有意义的比较,
//每一趟的比较次数多一次,但对于算法的时间复杂度没有什么实质性的意义;
{
if (arr[x] >arr[y]){
int temp =arr[x];
arr[x] =arr[y];
arr[y] =temp;
}
}
}
}
public static void printarray(int[] arr){
System.out.print("[");
for(int x = 0;x < arr.length ;x ++ ){
if (x != arr.length - 1){
System.out.print(arr[x]+ ", ");
}
else
System.out.print(arr[x]);
}
System.out.println("]");
}
public static void main(String[] args) {
int[] arr = {7,3,2,0,6,4,8,9,5,1};
printarray(arr);
selectsort(arr);
printarray(arr);
}
}
//选择排序
//原理:每次都找到当次最大的数,按大小顺序依次放入数组相应位置
//比如:第一次先找到最大的数并记下其位置,如果其不在数组第一位,
//则将其与第一位交换,使最大数置于第一位
//第二次再循环查找第二大的数并记下其位置,如果其不在数组第二位,
//则将其与第二位交换,使最大数置于第二位
//依次类推.........................................
//第i次再循环查找第i大的数并记下其位置,如果其不在数组第 i位,
//则将其与第 i位交换,使最大数置于第 i位
public class Java选择排序max {
public static void main(String[] args) {
int[] a = {7,3,2,0,6,4,8,9,5,1};
int max = 0;
int tmp = 0;
for(int i=0;i<a.length;i++){
max = i;//
/**查找第 i大的数,直到记下第 i大数的位置***/
for(int j=i+1;j<a.length;j++){
if(a[max]<a[j])
max = j;//记下较大数位置,再次比较,直到最大
}
/***如果第 i大数的位置不在 i,则交换****/
if(i!=max){
tmp = a[i];
a[i] = a[max];
a[max] = tmp;
}
}
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
}
public class Java选择排序min {
public static void main(String[] args) {
int[] arr ={7,3,2,0,6,4,8,9,5,1};
int temp = 0;
int min = 0;
for(int i=0;i<arr.length;i++){
min = i;
for(int j=i+1;j<arr.length;j++){
if(arr[min]>arr[j]){
min = j;
}
if(i!=min){
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
for(int k=0;k<arr.length;k++){
System.out.print(arr[k]+" ");
}
}
}