kushal.choudhary Ответов: 3

QuickSort не работает идеально помогите мне


какую ошибку я совершаю помогите мне
public class QuickSortExample {

    public static void main(String[] args) {
        int arr[] = {12, 34, 22, 64, 34, 33, 23, 64, 33};
        int i = 0;
        int j = arr.length;     
        
        while (i < j) {
            i = quickSort(arr, i, i + 1, j - 1);

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

    public static int quickSort(int arr[], int pivot, int i, int j) {

        if (i > j) {

            swap(arr, pivot, j);
            return i;
        }

        while (i < arr.length && arr[i] <= arr[pivot]) {

            i++;
        }

        while (j >= 1 && arr[j] >= arr[pivot]) {

            j--;
        }
        if (i < j) {
            swap(arr, i, j);
        }


        return quickSort(arr, pivot, i, j);
    }

    public static void swap(int[] arr, int i, int j) {
        int temp;
        temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}

Sandeep Mewara

Вы тоже должны были поделиться своей проблемой, с которой столкнулись.

3 Ответов

Рейтинг:
2

Mehdi Gholam

Прочитать следующее : http://www.vogella.com/articles/JavaAlgorithmsQuicksort/article.html[^]


Рейтинг:
0

TorstenH.

- один массив на входе - другой на выходе. Вы можете лучше видеть результат, делая это таким образом. выходной массив должен быть членом класса, поэтому вам не нужно передавать его так много.

- последовательное именование переменных. Вы меняетесь вокруг имен, используя много i и j- Это больше путаницы, чем нужно. Держите его прямо, одно имя для одной переменной, которая фиксирована на все времена. Также выбирайте более длинные имена, i и j рассматриваются только для подсчета в циклах. как насчет "iNext" ?


Рейтинг:
0

Manjunatha Shankar

Вот код для быстрой сортировки

public class QuickSort 
{
   int partition(int arrNum[], int low, int high)
   {
      int pivot = arrNum[high]; 
      int a = (low - 1); // smaller element index
      for(int b = low; b < high; b++)
      {
         // condition to check current element is smaller than or equal to pivot
         if(arrNum[b] <= pivot)
         {
            a++;
            // swapping arrNum[a] and arrNum[b]
            int temp = arrNum[a];
            arrNum[a] = arrNum[b];
            arrNum[b] = temp;
         }
      }
 
      // swapping arrNum[a + 1] and arrNum[high]
      int temp = arrNum[a + 1];
      arrNum[a + 1] = arrNum[high];
      arrNum[high] = temp;
 
      return a + 1;
   }
 
   void sortNumber(int arr[], int low, int high)
   {
      if(low < high)
      { 
         int part = partition(arr, low, high);
         // Recursive function sort elements before partition and after partition
         sortNumber(arr, low, part - 1);
         sortNumber(arr, part + 1, high);
      }
   }
 
   // printing utility function
   static void printingArray(int arr[])
   {
      int num = arr.length;
      for(int a = 0; a < num; ++a)
         System.out.print(arr[a] + " ");
      System.out.println();
   }
 
   public static void main(String[] args) 
   {
      int arr[] = {33, 36, 63, 34, 45, 78};
      int n = arr.length;
 
      QuickSort qs = new QuickSort();
      qs.sortNumber(arr, 0, n - 1);
 
      System.out.println("Quicksort sorted array : ");
      printingArray(arr);
   }
}


Patrice T

6 лет слишком поздно