Java-选择排序

public class Java选择排序 {
    /*    需求:给给定的数组排序,使数组递增排列,数组{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]+" ");
                    }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值