Java 优化数组排序子程序

Java 优化数组排序子程序,java,Java,我有下面的代码,这个程序的目的是在一个数组中生成30个随机数,并将它们从升序到降序排序,显示排序后的最小值和最大值,我想优化我的sortit子例程,我使用的方法是通过检查每个数字并根据它们是否大于或小于旁边的数字移动它们来对它们进行排序示例: 包含以下数字的数组:78 19 90 8 23 我的方法会用到每一个数字,然后开始移动它们,所以让我们假设到目前为止,数字90和78都在适当的位置,使数组顺序像这样19 8 23 78 90,所以我不希望我的程序去检查数字23 78和90,因为它们都在适当

我有下面的代码,这个程序的目的是在一个数组中生成30个随机数,并将它们从升序到降序排序,显示排序后的最小值和最大值,我想优化我的sortit子例程,我使用的方法是通过检查每个数字并根据它们是否大于或小于旁边的数字移动它们来对它们进行排序示例: 包含以下数字的数组:78 19 90 8 23 我的方法会用到每一个数字,然后开始移动它们,所以让我们假设到目前为止,数字90和78都在适当的位置,使数组顺序像这样19 8 23 78 90,所以我不希望我的程序去检查数字23 78和90,因为它们都在适当的位置,所以我如何优化代码,使它不会检查已经在适当的位置上的数字

注意:我不想要已经构建好的函数,比如Array.sort()

我的代码:

public class SortProg {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] tab =new int[30];
        int i;
        for(i=0;i< tab.length;i++) {
            tab[i]=(int)(Math.random()*1001);
            System.out.print(tab[i]+" ");
        }

        sortIt(tab);
        System.out.print("\nThe array after sorting: \n");
        for(i=0;i< tab.length;i++) {

            System.out.print(tab[i]+" ");
        }
        System.out.print("\nThe smallest value is: "+tab[0]);
        System.out.print("\nThe biggest value is: "+tab[29]);
}
    static void sortIt(int[]tab) {
        int i,j,temp;
        for(i=0;i<tab.length-1;i++) {
            for(j=0;j<tab.length-1;j++) {
                if(tab[j]>tab[j+1]) {
                    temp=tab[j];
                    tab[j]=tab[j+1];
                    tab[j+1]=temp;
                }
            }
        }
    }
    }
public类SortProg{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
int[]tab=新int[30];
int i;
对于(i=0;i对于(i=0;i首先,我建议您阅读排序算法。您的代码的复杂度为O(n^2),据我所知是调用的。这些是具有复杂度O(n*log(n))的快速代码,其中n是元素数

而且,当您了解了所有这些之后,可以尝试一下Java内置的排序函数

Arrays.sort(your_array_name);

首先,我建议您阅读排序算法。您的代码的复杂度为O(n^2),据我所知是调用的。这些是具有复杂度O(n*log(n))的快速算法,其中n是元素数

而且,当您了解了所有这些之后,可以尝试一下Java内置的排序函数

Arrays.sort(your_array_name);

这是一个未优化的冒泡排序。当最后一个循环完成时,最后一个元素已就位。在下一个循环中,您需要循环到
tab.length-1
,而不是循环到
tab.length-2
,然后循环到
tab.length-3
,依此类推


外部循环可以简化。这是一个未优化的冒泡排序,而不是(i=0;i的
。当最后一个循环完成时,最后一个元素处于适当位置。在下一个循环中,不是循环到
tab.length-1
你需要循环到
tab.length-2
,然后是
tab.length-3
,依此类推



外部循环可以简化。而不是(i=0;iyes我不知道为什么它没有发布,will edit我通常不会,但这次它不会让我复制粘贴好的,我现在就做是的,我不知道为什么它没有发布,will edit我通常不会,但这次它不会让我复制粘贴好的,我现在就做是的,我知道已经构建的函数,但我不想在这种情况下使用它们,t最简单的是array.sort,但这不是我想在这种情况下做的。你想澄清一下你想用什么吗?你想自己只使用循环和变量编写排序函数,还是使用Java内置数据结构编写函数?@samerg-链接不是指向内置函数。它们指向描述算法的Wikipedia页面rithms。如果你想让你的代码运行得更快,你需要理解排序算法。它不是真正的冒泡排序。两个循环都从零开始。冒泡排序更优化,不会每次都遍历整个数组。这本身就是一个巨大的改进。@magicmn冒泡排序只是排序的一个概念。有优化的,没有优化的-优化版本。当你开始使用算法的旅程时,首先你会了解非优化。是的,我知道已经构建的函数,但我不想在这种情况下使用它们,最简单的是数组。排序,但这不是我在这种情况下想做的。你想澄清一下你想使用什么吗?你想编写排序函数吗只使用循环和变量或使用Java内置数据结构编写函数?@samerg-链接不是指向内置函数。它们指向描述算法的Wikipedia页面。如果你想让代码运行得更快,你需要了解排序算法。这不是真正的冒泡排序。两个循环都从零开始。冒泡排序i它更优化了一点,不会每次都遍历整个数组。这本身已经是一个巨大的改进。@magicmn Bubble Sort只是排序的一个概念。有优化和未优化版本。当您开始使用算法的旅程时,您首先了解了未优化的。非常好,谢谢@Cid的帮助很好,谢谢@Cid的帮助