Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2009, 21:44   #1
_Studentka_
Пользователь
 
Аватар для _Studentka_
 
Регистрация: 03.11.2009
Сообщений: 24
По умолчанию Быстрая сортировка( помогите исправить ошибки)

Помогите,пожалуйста,исправить ошибки. Уже вторые сутки сижу над кодом и не могу понять в чем я ошибаюсь. Логика вроде правильная, но вот не сортирует.((

Код:
package quicksort;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Vector;

/**
 *
 * @author Администратор
 */
public class Quick1 {
    Vector<Integer>ob;
    int t,tem,temp,size;
    Quick1(){
        ob = new Vector<Integer>();
     
        t=0;
        temp=0;
        size=0;
     
        

    }
void menu() throws IOException{
    Scanner in = new Scanner(System.in);
    while(t!=3){


    System.out.println();
    System.out.println("____________________");
    System.out.println("________MENU________");
    System.out.println("____________________ ");
    System.out.println("Please,select operation");
    System.out.println("1)Add element to list");
    System.out.println("2) Sorting");
    System.out.println("3)Exit");
    System.out.println("------------------------>");
    t=in.nextInt();
    switch(t){
        case 1: AddElement();break;
        case 2: quickSort();break;
        case 3:{
            System.out.println("The end");
            System.out.println("Thank you for using this program");
            System.out.println("--------------------------------->");
            System.exit(0);break;
        }
        default:
            System.out.println("Enter correct value");
    }
    }
}
void AddElement() throws IOException{
    System.out.println("Enter your value->");
    BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
    int is1 = Integer.valueOf(is.readLine());
    ob.add(is1);
    size++;
    
 System.out.println("your value was added");
    System.out.println("Unsorted list");
    for(int i=0;i<size;i++){
        System.out.print(ob.get(i)+ "\t");

    }
}
 void quickSort() {
        int startIndex = 0;
        int endIndex = size;
        doSort(startIndex, endIndex);
    }

    void doSort(int start, int end) {
        if (start >= end)
            return;
        int i = start, j = end;
        int cur = i-(i-j)/ 2;
        while (i < j) {
            int a = ob.get(i);
            int b = ob.get(cur);
            int c = ob.get(j);
            while (i < cur && a <= b) {
                i++;
            }
            while (j > cur && b <= c) {
                j--;
            }
            if (i < j) {
                 temp = ob.get(i);
                 
                 ob.set(i,c);
                 ob.set(j, temp);

                if (i == cur)
                    cur = j;
                else if (j == cur)
                    cur = i;
            }
        }

        doSort(start, cur);
        doSort(cur+1, end);

    }
}
_Studentka_ вне форума Ответить с цитированием
Старый 21.11.2009, 16:37   #2
alexinspir
Новичок
Джуниор
 
Аватар для alexinspir
 
Регистрация: 26.08.2008
Сообщений: 1,010
По умолчанию

алгоритм quicksort не оч хорошо помню, но вроде как:
Код:
    void doSort(int start, int end) {
        if (start >= end)
            return;
        int i = start, j = end;
        int cur = i-(i-j)/ 2;
        while (i < j) {
            int a = ob.get(i);
            int b = ob.get(cur);
            int c = ob.get(j);
            while (i < cur && a <= b) {
                i++;
            }
            while (j > cur && b <= c) {
                j--;
            }
            if (i < j) {
                 temp = ob.get(i);
                 
                 ob.set(i,c);
                 ob.set(j, temp);

                if (i == cur)
                    cur = j;
                else if (j == cur)
                    cur = i;
            }
        }

        doSort(start, cur);
        doSort(cur+1, end);

    }
Не правильная реализация алгоритма.

http://ru.wikipedia.org/wiki/%D0%91%...B2%D0%BA%D0%B0
ромик0: Cколько получают здешние модераторы?
pu4koff: У модераторов сдельная оплата труда. Выдал предупреждение - плюс к премии. Выдал бан - лучший модератор месяца со всеми вытекающими.
alexinspir вне форума Ответить с цитированием
Старый 22.11.2009, 02:15   #3
_Studentka_
Пользователь
 
Аватар для _Studentka_
 
Регистрация: 03.11.2009
Сообщений: 24
По умолчанию

Я уже нашла ошибку. Там пара неправильных технических моментов.))))
_Studentka_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить ошибки Euforia_PZAS09_1 Паскаль, Turbo Pascal, PascalABC.NET 0 19.10.2009 21:41
Помогите исправить ошибки Satorin Общие вопросы Delphi 4 25.12.2008 21:35
помогите исправить ошибки kermit Помощь студентам 1 21.06.2008 10:44
Помогите исправить ошибки в программе Gambit90 Помощь студентам 1 20.12.2007 16:24
Помогите исправить ошибки ...С++ Настенька Помощь студентам 1 25.03.2007 23:30