根据长度对数组中的字符串进行排序

时间:2013-10-06 20:47:58

标签: java algorithm sorting

我有以下程序根据长度对字符串进行排序。我想先打印最短的元素。我不想使用Comparator或任何API来执行此操作。如果你能告诉我输入错误的地方,我会很感激。 PS:因为我是一名化学工程师,请轻松评论你的评论/ downvotes,我正努力学习Java。只有一个月:))

public class SortArrayElements {
    public static void main(String[] args) {
    String[] arr = new String[]{"Fan","dexter","abc","fruit","apple","banana"};
    String[] sortedArr = new String[arr.length];

    for(int i=0;i<sortedArr.length;i++)
    {           
        sortedArr[i] = compareArrayElements(arr);                       
    }

    System.out.println("The strings in the sorted order of length are: ");
    for(String sortedArray:sortedArr)
    {
        System.out.println(sortedArray);
    }

}

public static String compareArrayElements(String[] arr)
{
    String temp = null;
    for(int i=0;i<arr.length-1;i++)
    {
        temp = new String();
        if(arr[i].length() > arr[i+1].length())
            temp = arr[i+1];
        else
            temp = arr[i];
    }
    return temp;
}

}

8 个答案:

答案 0 :(得分:2)

使用bubble sort,而不是比较int,只需比较String个长度。

我不会为你编写代码。您将不得不对此算法进行一些研究。 Google是您作为程序员的最好朋友。

祝你好运。

参考文献:

答案 1 :(得分:2)

如果你真的想学习Java:使用比较器。任何其他方式都是糟糕的Java代码。

但是,如果需要,您可以重写比较器系统,它将教您正确的代码结构。

对于您的实际代码,这里有一些提示:

  • 使用正确的算法比您用于编码的语言重要得多。无论语言如何,好的算法总是一样的。

  • 除非您确实需要创建新对象,否则永远不要在循环中执行新操作。 GC说“谢谢”。

  • 将compareArrayElements函数更改为接受最小大小,并使其返回最小字符串且至少具有最小大小。

  • 您可以删除那些您认为最小的字符串(将它们设置为null),但这会修改​​原始数组。

答案 2 :(得分:0)

实施bubbleSort()swap()。我的实现改变了原始数组,但如果需要,可以修改它们以制作副本。

public class SortArrayElements {
    public static void main(String[] args) {
        String[] arr = new String[]{"Fan", "dexter", "abc", "fruit", "apple", "banana"};
        bubbleSort(arr);

        System.out.println("The strings in the sorted order of length are: ");
        for (String item : arr) {
            System.out.println(item);
        }

    }

    // Mutates the original array
    public static void bubbleSort(String[] arr) {
        boolean swapped = false;
        do {
            swapped = false;
            for (int i = 0; i < arr.length - 1; i += 1) {
                if (arr[i].length() > arr[i + 1].length()) {
                    swap(arr, i, i + 1);
                    swapped = true;
                }
            }
        } while (swapped);
    }

    // Mutates the original array
    public static void swap(String[] arr, int index0, int index1) {
        String temp = arr[index0];
        arr[index0] = arr[index1];
        arr[index1] = temp;
    }
}

答案 3 :(得分:0)

//基于长度

排序字符串数组

public class FirstNonRepeatedString {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    System.out.println("Please Enter your String");
    String str = in.nextLine();
    String arrString[] = str.split("\\s"); 
    arrString = sortArray(arrString);
    System.out.println("Sort String ");
    for(String s:arrString){
        System.out.println(s);
    }
}

private static String[] sortArray(String[] arrString) {
    int length = arrString.length;
        String s;
        for (int i = 0; i < length ; i++) {
            s= new String();

          for(int j = 0; j < length; j++ ){
              if(arrString[i].length()< arrString[j].length()){
                  s = arrString[i];
                  arrString[i] = arrString[j];
                  arrString[j] = s;
              }
          }
        }


    return arrString;
}

}

答案 4 :(得分:0)

好的,代码完全基于循环和冒泡排序。没有你想要的套装。这是一个纯循环程序,所以你可以理解嵌套循环,加上它不会改变索引或字符串的东西

      import java.util.*;

    class strings {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    ArrayList<String> a = new ArrayList<String>(2);
    System.out.println("Start entering your words or sentences.");
    System.out.println("Type stop to stop.");
    String b;
    int c = 0, d;

    do {
        b = in.nextLine();
        b = b.trim();
        a.add(b);
        c++;
    }
    while (!b.equalsIgnoreCase("stop"));
    if (c > 1)
        a.remove(a.size() - 1);


    System.out.println("Choose the sort you want. Type the corresponding 
    number");
    System.out.println("1. Ascending");
    System.out.println("2. Descending");
    int sc=in.nextInt();
    switch(sc) {

        case 1: {
            int sag[] = new int[a.size()];

            for (int jk = 0; jk < a.size(); jk++) {
                b = a.get(jk);
                c = b.length();
                sag[jk] = c;
            }
            int temp;
            for (int i = 0; i < a.size() - 1; i++) {
                for (int j = 0; j < a.size() - 1; j++) {
                    if (sag[j] > sag[j + 1]) {
                        temp = sag[j + 1];
                        sag[j + 1] = sag[j];
                        sag[j] = temp;
                    }
                }
            }
            ArrayList saga = new ArrayList();
            for (int i = 0; i < sag.length; i++) {
                saga.add(sag[i]);

            }
            for (int i = 0; i < saga.size(); i++) {

                for (int j = i + 1; j < saga.size(); j++) {
                    if (saga.get(i).equals(saga.get(j))) {
                        saga.remove(j);
                        j--;
                    }
                }

            }


            for (int i = 0; i < saga.size(); i++) {
                for (int j = 0; j < a.size(); j++) {
                    String jl = a.get(j);
                    if (saga.get(i).equals(jl.length()))
                        System.out.println(jl);
                }
            }
            break;
        }
        case 2: {
            int sag[] = new int[a.size()];

            for (int jk = 0; jk < a.size(); jk++) {
                b = a.get(jk);
                c = b.length();
                sag[jk] = c;
            }
            int temp;
            for (int i = 0; i < a.size() - 1; i++) {
                for (int j = 0; j < a.size() - 1; j++) {
                    if (sag[j] < sag[j + 1]) {
                        temp = sag[j + 1];
                        sag[j + 1] = sag[j];
                        sag[j] = temp;
                    }
                }
            }
            ArrayList saga = new ArrayList();
            for (int i = 0; i < sag.length; i++) {
                saga.add(sag[i]);

            }
            for (int i = 0; i < saga.size(); i++) {

                for (int j = i + 1; j < saga.size(); j++) {
                    if (saga.get(i).equals(saga.get(j))) {
                        saga.remove(j);
                        j--;
                    }
                }

            }


            for (int i = 0; i < saga.size(); i++) {
                for (int j = 0; j < a.size(); j++) {
                    String jl = a.get(j);
                    if (saga.get(i).equals(jl.length()))
                        System.out.println(jl);
                }
            }
            break;
        }
    }


}
}

答案 5 :(得分:0)

让我们接受以下字符串数组array inputArray = [“ abc”,“”,“ aaa”,“ a”,“ zz”]

我们可以使用Comparator对给定的字符串数组进行排序,以使用以下代码根据长度对其进行排序:

String[] sortByLength(String[] inputArray) {
        Arrays.sort(inputArray, new Comparator<String>(){
            public int compare(String s1, String s2){
                return s1.length() - s2.length();
            }
        });
        return inputArray;
    }

答案 6 :(得分:0)

例如,以下内容:

ArrayList<String> str = new ArrayList<>(
Arrays.asList(
"Long", "Short", "VeryLong", "S")
);

通过lambda:

str.sort((String s1, String s2) -> s1.length() - s2.length());

通过静态Collections.sort

 import static java.util.Collections.sort;
    sort(str, new Comparator<String>{
       @Override
         public int compare(String s1, String s2) {
           return s1.lenght() - s2.lenght()
}
});

这两个选项均默认通过List界面的 sort 方法实现

答案 7 :(得分:-2)

import java.util.*;
public class SortStringBasedOnTheirLength {

    public static void main(String[] args) {

    Scanner sc=new Scanner(System.in);

      System.out.println("Enter String:");

      String str=sc.nextLine();

      String[] str1=str.split("\\s");

      for(int i=0;i<str1.length;i++)
      {
          for(int j=i+1;j<str1.length;j++)
          {
              if(str1[i].length()>str1[j].length())
              {
                 String temp= str1[i];
                 str1[i]=str1[j];
                 str1[j]=temp;
              }
          }
      }

      for(int i=0;i<str1.length;i++)
      {
         System.out.print(str1[i]+" "); 
      }
    }

}