首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按数组中字符串的长度快速排序

按数组中字符串的长度快速排序
EN

Stack Overflow用户
提问于 2017-01-11 07:10:09
回答 1查看 916关注 0票数 0

我已经从用户那里扫描了字符串。下一步是根据文本的长度对数组进行排序,我不知道我做错了什么,有时它是有效的。

代码语言:javascript
复制
public static void quickSort(String[] subtitles, int start, int end) {
    int i = start;
    int j = end;
    if (j - i >= 1) {
        String pivot = subtitles[i];
        while (j > 1) {
            while (subtitles[i].compareTo(pivot) <= 0 && i < end && j > i)
                i++;

            while (subtitles[j].compareTo(pivot) >= 0 && j > start && j >= i)
                j--;

            if (j > i)
                swap(subtitles, i, j);
        }

        swap(subtitles, start, j);
        quickSort(subtitles, start, j - 1);
        quickSort(subtitles, j + 1, end);
    } else
        return;
}

public static void swap(String[] a, int i, int j) {
    String tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
}

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int amountStrings = 3;
    String[] subtitles = new String[amountStrings];
    System.out.println("insert ");
    for (int i = 0; i < amountStrings; i++) {
        subtitles[i] = scan.next();
    }

    System.out.println("--------");

    quickSort(subtitles, 0, subtitles.length - 1);

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

不正确:

在: asdzxc asd zxc

输出: asd asdzxc zxc

正确:

输入: sdf sdfsfwer s Out:

%s sdf sdfsfwer

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 07:40:44

好了,我检查了您的代码,并创建了两个新方法。一个按字母顺序对数组排序,另一个通过计算数组中每个单词的字母数来排序。哪种方法最适合你,这取决于你。经过测试并正常工作。

代码语言:javascript
复制
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Subtitles {

    public static void sortAlfabetical(String x[]) {
        int j;
        boolean found = true; // will determine when the sort is finished
        String temp;

        while (found) {
            found = false;
            for (j = 0; j < x.length - 1; j++) {
                if (x[j].compareToIgnoreCase(x[j + 1]) > 0) { // ascending sort
                    temp = x[j];
                    x[j] = x[j + 1]; // swap
                    x[j + 1] = temp;
                    found = true;
                }
            }
        }

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



    public static void compare(String[] arrayOne) {

        Arrays.sort(arrayOne, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });

        for (String s : arrayOne) {
            System.out.print(s + " ");
        }

    }




    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int amountStrings = 3;
        String[] subtitles = new String[amountStrings];
        System.out.println("insert ");
        for (int i = 0; i < amountStrings; i++) {
            subtitles[i] = scan.next();
        }

        System.out.println("--------");


        System.out.print("Sorting alphabetical: ");
        sortAlfabetical(subtitles);
        System.out.println();


        System.out.println("===========================");
        System.out.print("Sorting by word length: ");
        compare(subtitles);


    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41580076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档