快速排序数组并在Java中执行二进制搜索

阿米拉(AmilaBečirović)

因此,我必须设计一种无需使用Java API即可将quicksort用作排序算法的方法。然后,我必须编写另一个方法来返回排序后的数组,如果在其中找到了被搜索的元素,则使用二进制搜索返回true。我不知道我在哪里犯这个愚蠢的错误。

public class Aufgabe1 {
    public static void sort(int[] array) {
        /* TODO: add code here */
        sort(array, 0, array.length - 1);

    }

    public static void sort(int[] array, int start, int end) {
        int i = start;
        int j = end;
        int pivot = array[(start+end)/2];
        while (i <= j) {
            while (array[i] < pivot) {
                i++;
            }
            while (pivot < array[j]) {
                j--;
            }

            if (i <=j) {
                int h = array[i];
                array[i] = array[j];
                array[j] = h;
                i++;
                j--;
            }
        }
        if (start < i-1) {
            sort(array, start, i - 1);
        }
        if (i < end) {
            sort(array, i, end);
        }

    }

    public static boolean binSearch(int[] array, int elem) {
        /* TODO: add code here */

        int i = 0; //the first element
        int j = array.length -1; // the last element

        while (i<=j) {
            int k = i + ((i+j)/2); //try the middle word
            if (elem == array[k]){
                return true;
            }
            if (elem < array[k]) {
                j = k-1;
                return false;
            }else {
                i = k+1;
                return false;
            }
        }
        return false;
    }

    //just for testing
    public static void main(String[] args) {

        int[] arr = new int[] {5, 3, 7, 2, 1, 6};

        sort(arr);

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

        }
        binSearch(arr,5);

    }
詹姆士

尝试此操作,修复了一些小错误,您在错误的位置放置了几个i和j。虽然,我建议您对代码进行一些模块化,因为这将使事情更易于阅读,并使您对正在发生的事情有更好的了解。请注意,您实际上并未返回正确的位置,因此除非元素位于中间,否则它将始终返回false。另外,不建议使用静态方法。

编辑:另外,我刚刚注意到您在结束课程的末尾缺少一个'}'。

public class Main
{
    public static void sort(int[] array) 
    {
        /* TODO: add code here */
        sort(array, 0, array.length - 1);
    }

    public static void sort(int[] array, int start, int end) 
    {
        int i = start;
        int j = end;
        int pivot = array[(start+end)/2];

        while (i <= j)
        {
            while (array[i] < pivot) 
            {
                i++;
            }

            while (pivot < array[j]) 
            {
                j--;
            }

            if (i <=j)
            {
                int h = array[i];
                array[i] = array[j];
                array[j] = h;
                i++;
                j--;
            }
        }

        if (start < i-1)
        {
            sort(array, start, i - 1);
        }

        if (i < end) 
        {
            sort(array, i, end);
        }
    }

    public static boolean binSearch(int[] array, int elem) 
    {
        /* TODO: add code here */

        int i = 0; //the first element
        int j = array.length -1; // the last element
        int k = i + ((i+j)/2); //try the middle word

        while (k >= 0 && k < array.length) 
        {
            if (elem == array[k])
            {
                return true;
            }

            if (elem < array[k]) 
            {
                k--;
            }

            else
            {
                k++;
            }
        }

        return false;
    }

    //just for testing
    public static void main(String[] args)
    {
        int[] arr = new int[] {5, 3, 7, 2, 1, 6};

        sort(arr);

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

        if (binSearch(arr,5))
        {
            System.out.println("TRUE");
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

二进制搜索并插入对象的排序数组

排序数组并使用二进制搜索

在排序的数组的二进制搜索

为什么在这种排序数组情况的二进制搜索中仍然存在错误情况?

如何计算在排序数组中两次出现的键的二进制搜索的最坏情况时间?

二进制搜索查找排序数组中比给定值最小和最大的元素?

对具有重复项的排序数组使用二进制搜索

在许多排序数组中进行二进制搜索

OCaml中排序数组内的二进制搜索

使用二进制搜索检查排序的非顺序数组是否有重复项?

Java数组二进制搜索

数组中的二进制搜索

数组中的二进制搜索

数组到二进制搜索树快速

Java中的二进制搜索

二进制搜索功能无法找到指定的数字(如果它们位于排序数组的末尾或开头)

排序矩阵中的二进制搜索

使用bsearch c在字符串数组中执行二进制搜索

二进制搜索树-排序?

Java中排序后的(内存映射?)文件中的二进制搜索

二进制搜索数组中的正确位置

如何使用二进制搜索找到将值插入有序数组的位置?

在计算两个已排序数组的中位数时,是否有较小的数组驱动二进制搜索?

从Java中的二进制搜索树中删除

Java中的二进制搜索小错误

二进制搜索变体中的无限循环(Java)

是否可以在Java中执行二进制文件?

我寻找二进制值是否在数组中的二进制搜索永远循环,有人知道为什么吗?(在Java中)

二进制搜索CompareTo Java