【问题标题】:Java : Sort integer array without using Arrays.sort()Java:不使用 Arrays.sort() 对整数数组进行排序
【发布时间】:2012-11-12 23:19:25
【问题描述】:

这是我们 Java 课程中的一个练习中的说明。首先,我想说我“做我的功课”,而且我不只是懒惰地要求 Stack Overflow 上的某个人为我回答这个问题。在所有其他练习中,这个特定项目一直是我的问题,因为我一直在努力为此找到“完美算法”。

编写 JAVA 程序,输入 10 个整数值并按升序或降序显示。注意:不允许使用 Arrays.sort()。

这是我想出的代码,它可以工作,但它有一个明显的缺陷。如果我两次或多次输入相同的值,例如:

5、5、5、4、6、7、3、2、8、10

输入的三个 5 中只有一个会被计算并包含在输出中。我得到的输出(升序)是:

2 3 4 5 0 0 6 7 8 10。

import java.util.Scanner;

public class Exer3AscDesc
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        int tenNums[]=new int[10], orderedNums[]=new int[10];
        int greater;
        String choice;

        //get input
        System.out.println("Enter 10 integers : ");
        for (int i=0;i<tenNums.length;i++)
        {
            System.out.print(i+1+"=> ");
            tenNums[i] = scan.nextInt();
        }
        System.out.println();

        //imperfect number ordering algorithm
        for(int indexL=0;indexL<tenNums.length;indexL++)
        {
            greater=0;
            for(int indexR=0;indexR<tenNums.length;indexR++)
            {
                if(tenNums[indexL]>tenNums[indexR])
                {
                    greater++;
                }
            }
            orderedNums[greater]=tenNums[indexL];
        }

        //ask if ascending or descending
        System.out.print("Display order :\nA - Ascending\nD - Descending\nEnter your choice : ");
        choice = scan.next();

        //output the numbers based on choice
        if(choice.equalsIgnoreCase("a"))
        {
            for(greater=0;greater<orderedNums.length;greater++)
            {
                System.out.print(orderedNums[greater]+" ");
            }
        }
        else if(choice.equalsIgnoreCase("d"))
        {
            for(greater=9;greater>-1;greater--)
            {
                System.out.print(orderedNums[greater]+" ");
            }
        }
    }
}

【问题讨论】:

标签: java arrays sorting integer int


【解决方案1】:

int[] arr = {111, 111, 110, 101, 101, 102, 115, 112};

/* for ascending order */

System.out.println(Arrays.toString(getSortedArray(arr)));
/*for descending order */
System.out.println(Arrays.toString(getSortedArray(arr)));

private int[] getSortedArray(int[] k){  

        int localIndex =0;
        for(int l=1;l<k.length;l++){
            if(l>1){
                localIndex = l;
                while(true){
                    k = swapelement(k,l);
                    if(l-- == 1)
                        break;
                }
                l = localIndex;
            }else
                k = swapelement(k,l);   
        }
        return k;
    }

    private int[] swapelement(int[] ar,int in){
        int temp =0;
        if(ar[in]<ar[in-1]){
            temp = ar[in];
            ar[in]=ar[in-1];
            ar[in-1] = temp;
        }

        return ar;
    }

private int[] getDescOrder(int[] byt){
        int s =-1;
        for(int i = byt.length-1;i>=0;--i){
              int k = i-1;
              while(k >= 0){
                  if(byt[i]>byt[k]){
                      s = byt[k];
                      byt[k] = byt[i];
                      byt[i] = s;
                  }
                  k--;
              }
           }
        return byt;
    }


输出:-
升序:- 101、101、102、110、111、111、112、115


降序:- 115、112、111、111、110、102、101、101

【讨论】:

    【解决方案2】:

    简单的方法:

    int a[]={6,2,5,1};
                System.out.println(Arrays.toString(a));
                 int temp;
                 for(int i=0;i<a.length-1;i++){
                     for(int j=0;j<a.length-1;j++){
                         if(a[j] > a[j+1]){   // use < for Descending order
                             temp = a[j+1];
                             a[j+1] = a[j];
                             a[j]=temp;
                         }
                     }
                 }
                System.out.println(Arrays.toString(a));
    
        Output:
        [6, 2, 5, 1]
        [1, 2, 5, 6]
    

    【讨论】:

    • 在内部循环中你根本没有使用变量 i
    【解决方案3】:
    int x[] = { 10, 30, 15, 69, 52, 89, 5 };
        int max, temp = 0, index = 0;
        for (int i = 0; i < x.length; i++) {
            int counter = 0;
            max = x[i];
            for (int j = i + 1; j < x.length; j++) {
    
                if (x[j] > max) {
                    max = x[j];
                    index = j;
                    counter++;
                }
    
            }
            if (counter > 0) {
                temp = x[index];
                x[index] = x[i];
                x[i] = temp;
            }
        }
        for (int i = 0; i < x.length; i++) {
            System.out.println(x[i]);
        }
    

    【讨论】:

      【解决方案4】:

      这肯定会对你有所帮助。

      int n[] = {4,6,9,1,7};
      
          for(int i=n.length;i>=0;i--){
              for(int j=0;j<n.length-1;j++){
                  if(n[j] > n[j+1]){
                      swapNumbers(j,j+1,n);
                  }
              }
      
          }
          printNumbers(n);
      }
      private static void swapNumbers(int i, int j, int[] array) {
      
          int temp;
          temp = array[i];
          array[i] = array[j];
          array[j] = temp;
      }
      
      private static void printNumbers(int[] input) {
      
          for (int i = 0; i < input.length; i++) {
              System.out.print(input[i] + ", ");
          }
          System.out.println("\n");
      }
      

      【讨论】:

        【解决方案5】:

        不使用 java 中的内置函数的数组排序......只需创建新文件取消此名称 -> (ArraySorting.java) ..... 运行项目并享受它!!!!!!

            import java.io.*;
            import java.util.Arrays;
            import java.util.Scanner;
            public class ArraySorting 
            {
            public static void main(String args[])
            {
              int temp=0;   
              Scanner user_input=new Scanner(System.in);
               System.out.println("enter Size of Array...");
            int Size=user_input.nextInt();
        
            int[] a=new int[Size];
            System.out.println("Enter element Of an Array...");
            for(int j=0;j<Size;j++)
            {
                a[j]=user_input.nextInt();
            }     
            for(int index=0;index<a.length;index++)
            {
                for(int j=index+1;j<a.length;j++)
                {
                     if(a[index] > a[j] ) 
                     {
                         temp = a[index];
                         a[index] = a[j];
                         a[j] = temp;
                     }
                }
            }
            System.out.print("Output is:- ");
            for(int i=0;i<a.length;i++)
            {
                System.out.println(a[i]);
            }
        
        }
        }
        

        【讨论】:

          【解决方案6】:

          这里可以使用冒泡排序:

           //Time complexity: O(n^2)
          public static int[] bubbleSort(final int[] arr) {
          
              if (arr == null || arr.length <= 1) {
                  return arr;
              }
          
              for (int i = 0; i < arr.length; i++) {
                  for (int j = 1; j < arr.length - i; j++) {
                      if (arr[j - 1] > arr[j]) {
                          arr[j] = arr[j] + arr[j - 1];
                          arr[j - 1] = arr[j] - arr[j - 1];
                          arr[j] = arr[j] - arr[j - 1];
                      }
                  }
              }
          
              return arr;
          }
          

          【讨论】:

            【解决方案7】:

            这里是排序简单的例子试试吧

            public class SortingSimpleExample {
            
                public static void main(String[] args) {
                    int[] a={10,20,1,5,4,20,6,4,2,5,4,6,8,-5,-1};
                          a=sort(a);
                    for(int i:a)
                          System.out.println(i);
            }
                public static int[] sort(int[] a){
            
                    for(int i=0;i<a.length;i++){
                        for(int j=0;j<a.length;j++){
                            int temp=0;
                            if(a[i]<a[j]){
                                temp=a[j];                  
                                a[j]=a[i];                  
                                a[i]=temp;      
                              }         
                            }
                    }
                    return a;
            
                }
            }
            

            【讨论】:

              【解决方案8】:
              class Sort 
              {
                  public static void main(String[] args) 
                  {
                  System.out.println("Enter the range");
                  java.util.Scanner sc=new java.util.Scanner(System.in);
                  int n=sc.nextInt();
                  int arr[]=new int[n];
                  System.out.println("Enter the array values");
                  for(int i=0;i<=n-1;i++)
                  {
                      arr[i]=sc.nextInt();
              
                  }
                  System.out.println("Before sorting array values are");
                   for(int i=0;i<=n-1;i++)
                  {
                   System.out.println(arr[i]);
                     }
                  System.out.println();
                  for(int pass=1;pass<=n;pass++)
                  {
                  for(int i=0;i<=n-1;i++)
                  {
                      if(i==n-1)
                      {
                          break;
                      }
                      int temp;
                      if(arr[i]>arr[i+1])
                      {
              
                          temp=arr[i];
                          arr[i]=arr[i+1];
                          arr[i+1]=temp;
                      }
                  }
                  }
              
                  System.out.println("After sorting array values are");
                     for(int i=0;i<=n-1;i++)
                  {
                   System.out.println(arr[i]);
                     }
              
              }
              }    
              

              【讨论】:

              • 这是我的逻辑
              【解决方案9】:

              如果您不太担心性能,我建议您查看Selection sortInsertion sort。也许这会给你一些想法。

              【讨论】:

                【解决方案10】:

                您可以在互联网上找到许多不同的排序算法,但如果您想修复自己的解决方案,您可以对代码进行以下更改:

                代替:

                 orderedNums[greater]=tenNums[indexL];
                

                你需要这样做:

                while (orderedNums[greater] == tenNums[indexL]) {
                     greater++;
                }
                orderedNums[greater] = tenNums[indexL];
                

                此代码主要检查该特定索引是否被相似的数字占用,然后它将尝试查找下一个空闲索引。

                注意:由于已排序数组元素中的默认值为 0,因此您需要确保 0 不在列表中。否则你需要 用一个你确定是的特殊数字来启动你的排序数组 不在您的列表中,例如:Integer.MAX_VALUE

                【讨论】:

                • 非常感谢 mohammad,我花了太多时间尝试制定不同的算法,我没有意识到我只需将那一行添加到我的代码中是多么简单。
                【解决方案11】:

                简单排序算法Bubble sort

                public static void main(String[] args) {
                    int[] arr = new int[] { 6, 8, 7, 4, 312, 78, 54, 9, 12, 100, 89, 74 };
                
                    for (int i = 0; i < arr.length; i++) {
                        for (int j = i + 1; j < arr.length; j++) {
                            int tmp = 0;
                            if (arr[i] > arr[j]) {
                                tmp = arr[i];
                                arr[i] = arr[j];
                                arr[j] = tmp;
                            }
                        }
                    }
                }
                

                【讨论】:

                  【解决方案12】:

                  这是一个简单的解决方案

                  public static void main(String[] args) {        
                          //Without using Arrays.sort function
                          int i;
                          int nos[] = {12,9,-4,-1,3,10,34,12,11};
                          System.out.print("Values before sorting: \n");
                          for(i = 0; i < nos.length; i++)
                              System.out.println( nos[i]+"  ");               
                          sort(nos, nos.length);
                          System.out.print("Values after sorting: \n");       
                          for(i = 0; i <nos.length; i++){
                              System.out.println(nos[i]+"  ");
                          }
                      }
                  
                      private static void sort(int nos[], int n) {
                       for (int i = 1; i < n; i++){
                            int j = i;
                            int B = nos[i];
                            while ((j > 0) && (nos[j-1] > B)){
                              nos[j] = nos[j-1];
                              j--;
                            }
                            nos[j] = B;
                          }
                      }
                  

                  输出是:

                  排序前的值:

                  12
                  9
                  -4
                  -1
                  3
                  10
                  34
                  12
                  11

                  排序后的值:

                  -4
                  -1
                  3
                  9
                  10
                  11
                  12
                  12
                  34

                  【讨论】:

                    猜你喜欢
                    • 2019-10-18
                    • 2013-09-21
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多