2013-03-19 2 views
-1
public static void sort(int[] a){ 
     if (a.length>1){ 
      int pivot=a[a.length-1]; 
      int left=0; 
      int right=a.length-1; 
      while(left<=right){ 
       while(a[left]<pivot) 
        left++; 
       while(a[right]>pivot) 
        right--; 
       if(left<=right){ 
        int tmp=a[right]; 
        a[right]=a[left]; 
        a[left]=tmp; 
        left++; 
        right--; 
       } 
      } 
      int[] tmp1=new int[right]; 
      for(int i=0;i<tmp1.length;i++) 
       tmp1[i]=a[i]; 
      int[] tmp2=new int[a.length-right-1]; 
      for(int i=left;i<a.length;i++) 
       tmp2[i-left]=a[i]; 
      sort(tmp1); 
      sort(tmp2); 
     } 
    } 

Я пытаюсь написать алгоритм быстрой сортировки с одной функцией, и это не сработает. Любая помощь аппроксимируется. СпасибоБыстрый алгоритм с одной функцией

EDIT: Я решил, что спасибо всем за ваш вклад.

+3

Как это работает? – Blender

+0

Он не сортирует его правильно. Я пробовал с несколькими размерами и значениями массивов, и каждый раз они сортируют их неправильно. – golfguru

ответ

2

Я думаю, что проблема в том, что в конце концов вы не используете tmp1 и tmp2, чтобы соответствовать новому массиву a ... Вот способ сделать это, не создавая другие массивы:

public static void sort(int[] a, int left, int right){ 
     if (left < right){ 
      int pivot = a[right]; 
      int pos = left - 1; 
      for (int i = left; i < right; i++) 
       if (a[i] <= pivot) 
        Swap(a, ++pos, i); 
      Swap(a, pos + 1, right); 
      sort(a, left, pos); 
      sort(a, pos + 1, right); 
     } 

    } 

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

The первый вызов рода должен быть sort(a, 0, a.length - 1)

Я надеюсь, что это поможет вам

+0

Я должен реализовать его с помощью одной функции, и функция может принимать только массив. Я понял это, спасибо за ваш ответ. – golfguru

0

Вашего метод сортировки кажется чрезвычайно по сравнению с большинством методов ИНТОВ сортировки. Вот быстрый и легкий.

public static void sort(int[] intArray){ 
    int n = intArray.length; 
    int temp = 0; 
    for(int i=0; i < n; i++){ 
     for(int j=1; j < (n-i); j++){ 
      if(intArray[j-1] > intArray[j]){ 
       temp = intArray[j-1]; 
       intArray[j-1] = intArray[j]; 
       intArray[j] = temp; 
      } 
     } 
    } 
} 

Это просто пузырь. Я не вижу смысла в рекурсии. Там есть куча других типов, но для короткой длины массива это самый простой (IMO). Посмотрите на некоторые другие, их классные круто, что они делают (Sorting algorithm).

Чтобы получить на свой вопрос .... Как @RobinCurbelo сказал, вы не использовали temp1 и temp2 правильно. Ваша идея есть, но я думаю, вы слишком много думали о том, что вам нужно делать.

 Смежные вопросы

  • Нет связанных вопросов^_^