老师 我自己尝试了好几次 写了一会 感觉哪里总不太对 思维有点局限 一时半会没有想出来?

来源:1-1 最简单的排序算法:选择排序法

licslan

2020-08-13 17:07:25

http://img.mukewang.com/climg/5f3502a209b116d612790797.jpg

public static int[] sortAfter(int[] sortBefore){
    //3,4,1,5  先把最小拿出来  剩下的,再把其中最小的拿出来 ...... 每次选择还没处理的元素里最小的元素
    int[] sortAfter = new int[0];
    if (sortBefore.length>0) {
        //初始化一个排序后的数组
        sortAfter = new int[sortBefore.length];
        //初始化一个新数组 用装少了当时最小值的数组
        int[] newArr = new int[0];//这个数组没有用上呀 ???
        int length = sortBefore.length;
        for (int k=0;k<sortAfter.length;k++) {
            //遍历这个数组 并生成一个新数组
            for (int i = 0; i < sortBefore.length; i++) {
                //拿一个值认为是最小值
                int min = sortBefore[0];
                //找出最小值
                if(sortBefore[i]<=min){
                    sortAfter[k]=sortBefore[i];
                    sortBefore[i]=sortBefore[i+1];//???  这部分逻辑感觉没有处理对  一时半会没有想出来
                }
            }
            //遍历完了 长度减一
            length --;
        }
    }
    return sortAfter;
}


写回答

2回答

licslan

提问者

2020-08-13

老师  看了后面讲的  但这种感觉自己写的好像差了不少(代码量多了些感觉)下午也写了好久  ^_^  

/**
* 选择排序非原地排序实现  (递归)
* */
public static ArrayList sortAfter(int[] sortBefore,ArrayList list){
   //3,4,1,5  先把最小拿出来  剩下的,再把其中最小的拿出来 ...... 每次选择还没处理的元素里最小的元素
   int minIndex = sortBefore[0];//定义最小值为该数组的第一个数
   int indexDel=0;//要删除元素的下标
   //遍历循环数组
   for (int i = 0; i < sortBefore.length; i++) {
       if(minIndex > sortBefore[i]){minIndex = sortBefore[i]; indexDel=i;}//The index need to be deleted
   }
   list.add(minIndex);
   //删除指定元素的生成新的数组
   int[] intNew = delAnyPos(sortBefore, indexDel);
   if(intNew.length>0) {
       sortAfter(intNew, list);
   }
   return list;
}

/**
* 删除指定数组的指定下标元素
* */
public static int[] delAnyPos(int[] arr,int position){
   //判断是否合法
   if(position >= arr.length || position < 0){
       return null;
   }
   int[] res = new int[arr.length - 1];
   for(int i = 0;i<res.length;i++){
       if(i < position){
           res[i] = arr[i];
       }else{
           res[i] = arr[i + 1];
       }
   }
   return res;
}

public static void main(String[] args) {
   int[] ints = {1, 34, 4, 5};
   //非原地实现选择插入元素
   ArrayList arrayList = new ArrayList();
   ArrayList arrayAfter = sortAfter(ints, arrayList);
   for (int i = 0; i < arrayAfter.size(); i++) {
       System.out.println(arrayAfter.get(i));
   }
}



0

liuyubobobo

2020-08-13

继续看下一小节呀,后续我就会给出课程的选择排序的参考实现,届时再来比对自己的思路,看看自己的思路哪里有问题?


继续加油!:)

0

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2584 学习 · 1063 问题

查看课程