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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2013, 21:42   #1
peterson
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 15
По умолчанию сортировка пузырком (java)

вот написал прогу ну чтота он не так сортирует
Код:
public static void main(String[] args) {
		
		int[] a= {2,5,6,9,10,3,4,5,8};
		for(int i=0;i<a.length-1;i++){
			 for(int j=i+1;j<a.length;j++){
			  if(a[i]>a[j]){
			       int b=a[i];
			       a[i]=a[j];
			       a[j]=b;
			       System.out.print(b+ " " );
			  }
			  
			  
			 }
			
		}
	
	}
}
peterson вне форума Ответить с цитированием
Старый 20.02.2013, 22:05   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

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

Предположим, что N кол-во элементов массива.
Вам надо сравнить N-1 элементов со стоящим справа
Код:
if(a[i]>a[i+1])
На следующем проходе сравнить i-2 элементов.... и так до тех пор, пока i-n не станет равен единице, где n текущий шаг цикла.
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 20.02.2013 в 22:10.
ROD вне форума Ответить с цитированием
Старый 20.02.2013, 22:15   #3
peterson
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 15
По умолчанию

Код:
public static void main(String[] args) {
		Scanner inp=new Scanner(System.in);
	    System.out.print("size=");
		int size=inp.nextInt();
		int []arr=new int[size];
		
		 for(int i=0;i<arr.length;i++){
			System.out.print("arr["+i+"]=");
			arr[i]=inp.nextInt();;
		 }
		
		
		for(int f=0;f<arr.length-1;f++){
			 for(int j=f+1;j<arr.length;j++){
			  if(arr[f]>arr[f+1]){
			       int b=arr[f];
			       arr[f]=arr[j];
			       arr[j]=b;
			       System.out.print(b+ " " );
			  }
			  
			  
			 }
			
		}
	
	}
	}

вот что у меня получилось!! но почему то не сортуєт!!
peterson вне форума Ответить с цитированием
Старый 20.02.2013, 22:19   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Попробуйте так:
Код:
                     for(int f=0;f<arr.length;f++){
			 for(int j=arr.length-f;j<arr.length;j++){
			     if(arr[j]>arr[j+1]){
			        int b=arr[j];
			        arr[j]=arr[j+1];
			        arr[j+]=b;
			        System.out.print(b+ " " );
                                }
                         }
                     }
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 20.02.2013 в 22:22.
ROD вне форума Ответить с цитированием
Старый 20.02.2013, 22:32   #5
peterson
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 15
По умолчанию

Код:
arr[j+]=b;
ошибка
peterson вне форума Ответить с цитированием
Старый 20.02.2013, 22:34   #6
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

могли бы и догадаться, что там опечатка.
Код:
arr[j+1]=b;
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 20.02.2013, 22:37   #7
peterson
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 15
По умолчанию

Код:
public static void main(String[] args) {
		Scanner inp=new Scanner(System.in);
	    System.out.print("size=");
		int size=inp.nextInt();
		int []arr=new int[size];
		
		 for(int d=0;d<arr.length;d++){
			System.out.print("a["+d+"]=");
			arr[d]=inp.nextInt();;
		 }
		
		 for(int f=0;f<arr.length;f++){
			 for(int j=arr.length-f;j<arr.length;j++){
			     if(arr[j]>arr[j+1]){
			        int b=arr[j];
			        arr[j]=arr[j+1];
			        arr[j+1]=b;
			        System.out.print(b+ " " );
                                }
                         }
                     }
		
			    }
			

	}
выдает ошибку
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExce ption: 7
peterson вне форума Ответить с цитированием
Старый 20.02.2013, 22:42   #8
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

ага, точно. вложенный цикл поправьте.

Код:
for(int j=arr.length-f;j<arr.length-1;j++){

upd.

И я, кажается, алгоритм не правильно сделал

Код:
for(int f=0;f<arr.length;f++){
			 for(int j=0;j<arr.length-f-1;j++){
			     if(arr[j]>arr[j+1]){
			        int b=arr[j];
			        arr[j]=arr[j+1];
			        arr[j+1]=b;
			        System.out.print(b+ " " );
                                }
                         }
                     }
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 20.02.2013 в 22:46.
ROD вне форума Ответить с цитированием
Старый 20.02.2013, 23:09   #9
peterson
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 15
По умолчанию

Код:
public static void main(String[] args) {
		Scanner inp=new Scanner(System.in);
	    System.out.print("size=");
		int size=inp.nextInt();
		int []arr=new int[size];
		
		 for(int d=0;d<arr.length;d++){
			System.out.print("a["+d+"]=");
			arr[d]=inp.nextInt();;
		 }
		
		 for(int i=0;i<arr.length-1;i++){
			 for(int j=i+1;j<arr.length;j++){
			     if(arr[i]>arr[j]){
			        int b=arr[j];
			        arr[i]=arr[j];
			        arr[j]=b;
			        System.out.print(b+ " " );
                                }
                         }
                     }
		
			    }
			

	}

вот нашол один алгоритм на одном форуме

Код:
for(int i=0;i<arr.length-1;i++){
 for(int j=i+1;j<arr.length;j++){
  if(arr[i]>arr[j]){
       int tmp=arr[i];
       arr[i]=arr[j];
       arr[j]=tmp;
  }
 }
}
и какой правильный непонятно ни тот ни тот не работает!!

ни ваш ни етот!!
peterson вне форума Ответить с цитированием
Старый 20.02.2013, 23:17   #10
peterson
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 15
По умолчанию

спасибо решил проблему!!
peterson вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JAVA. Ввод и сортировка чисел liza1990 Помощь студентам 0 17.02.2013 13:55
Программирование на JAVA. Сортировка подсчётом. Bodryash Помощь студентам 0 03.12.2012 16:49
Сортировка обьектов в ArrayList Java Sarumjan Помощь студентам 0 30.10.2012 23:34
Java пузырьковая сортировка Julila Помощь студентам 1 28.09.2011 21:46
Сортировка двумерного массива Java. Тёма Сашко Помощь студентам 7 21.02.2010 19:00