千家信息网

Java选择排序的方法是什么

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,本篇内容主要讲解"Java选择排序的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java选择排序的方法是什么"吧!public class S
千家信息网最后更新 2024年11月18日Java选择排序的方法是什么

本篇内容主要讲解"Java选择排序的方法是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java选择排序的方法是什么"吧!

public class SelectSort {    public static void main(String[] args) {        int[] nums = {49,38,65,97,76,13,27,49};//        simpleSelectSort(nums);//        treeSelectSort(nums);        heapSelectSort(nums);        for (int num:nums) {            System.out.print(num+"\t");        }    }/**简单排序处理流程(1)从待排序序列中,找到关键字最小的元素;(2)如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;(3)从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。**/    static void simpleSelectSort(int[] nums){//7,6,3,4,5        for (int i = 0; i < nums.length; i++) {            int minIndex = i;            for (int j = i+1; j < nums.length; j++) {                if (nums[minIndex]>nums[j]) {                    minIndex = j;                }            }            if (minIndex!=i) {                int temp = nums[i];                nums[i] = nums[minIndex];                nums[minIndex] = temp;            }        }    }    static void treeSelectSort(int[] nums){//19 , 38 ,  65  ,97  , 76  ,13  , 27 , 49        int len = nums.length;        int treeSize = 2*len - 1;  //满二叉树的节点数        int low = 0;        int[] tree = new int[treeSize];//临时的树存储空间        //由后向前填充此树,索引从0开始        for (int i = len -1,j = 0;i >= 0;--i,j++){//填充叶子节点            tree[treeSize - 1 - j] = nums[i];        }        for (int x:tree) {            System.out.print(x+"\t");        }        System.out.println();        for (int i = treeSize - 1; i > 0; i -=2){//填充非终端节点//            System.out.println(i+"---"+((i - 1)/2));            tree[(i-1)/2] = (tree[i - 1] < tree[i] ? tree[i - 1] : tree[i]);        }        for (int x:tree) {            System.out.print(x+"\t");        }        System.out.println();        //不断移走最小节点        int minIndex;        while (low < len){            int min = tree[0]; //最小值            nums[low++] = min;            minIndex = treeSize - 1;            while(tree[minIndex] != min){//不断移走最小节点                minIndex--;            }            tree[minIndex] = Integer.MAX_VALUE;//设置一个最大值标志            //找到其兄弟节点            while (minIndex > 0){//如果其还有父节点     -->该步骤旨在重新生成一颗树                if (minIndex % 2 == 0){//如果是右节点                    tree[(minIndex - 1)/2] = (tree[minIndex - 1] < tree[minIndex] ? tree[minIndex - 1] : tree[minIndex]);                    minIndex = (minIndex-1)/2;                } else {//如果是左节点                    tree[minIndex/2] = (tree[minIndex] < tree[minIndex + 1] ? tree[minIndex] : tree[minIndex + 1]);                    minIndex = minIndex/2;                }            }//            for (int x:tree) {//                System.out.print(x+"\t");//            }//            System.out.println();        }    }    static void heapSelectSort(int[] nums){        int len = nums.length;        //构建堆        for (int i = (len -1)/2; i >= 0; i--) {            heapAdjust(nums,i,len);        }        //输出堆顶元素并调整建新堆的过程        int count = len-1;        while(count > 0 ){            //交换树根与最后一个值            swap(nums,0,count);            count -- ;            heapAdjust(nums,0,count);        }    }    static void heapAdjust(int[] nums, int i, int len) {        int parent = nums[i];        for (int j = (i+1)*2 - 1; j < len; j=(j+1)*2 - 1) {            if (j < len -1 && nums[j] < nums[j+1]){                ++j;            }            if (parent > nums[j]){                break;            }            nums[i] = nums[j];            i = j;        }        nums[i] = parent;    }    /**     * 交换数组中两元素的值     */    private static void swap(int[] nums,int i,int j){        int temp = nums[i];        nums[i] = nums[j];        nums[j] = temp;    }}

到此,相信大家对"Java选择排序的方法是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0