Принимая восходящее целое число Массив. Двухсторонняя сортировка пузырьков немного лучше, чем традиционная сортировка пузырьков, потому что оба конца массива хорошо отсортированы во время двунаправленной сортировки, нам нужно только обработать среднюю часть массива, в то время как односторонняя, то есть традиционная сортировка пузырьков, Только элементы в хвосте. Хотя он немного повысил эффективность, он не может значительно повысить эффективность сортировки, которая определяется основным процессом сортировки пузырьков. Исходя из этого, это было улучшено.
Двусторонний пузырь сортировка исходный код:
Кода -копия выглядит следующим образом:
пакет com.zc.manythread;
импортировать java.util.random;
/**
* Двусторонний пузырь
* @author я
*
*/
открытый класс BBSORT {
// Алгоритм двунаправленного пузыря значительно уменьшает количество раз сортировки петли
public int [] sort (int [] a) бросает исключение {
int j;
int limit = a.length;
int st = -1;
while (ST <Limit) {
// Св.
ST ++;
предел-;
логическое поменение = false;
// Первый цикл ставит максимальное значение до конца
for (j = st; j <limit; j ++) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
поменяться = true;
}
}
if (! Поменялся) {
вернуть А;
}еще {
поменять = false;
// Второй петлей ставит минимальное значение в начале
for (j = limit; --j> = st;) {
if (a [j]> a [j+1]) {
int t = a [j];
a [j] = a [j+1];
a [j+1] = t;
поменяться = true;
}
}
if (! Поменялся) {
вернуть А;
}
}
}
вернуть А;
}
private static int [] censue (int count) {
/**
* Нет дубликата массива
*/
int [] data = new int [count];
Случайный rand = new Random ();
Boolean [] bool = new Boolean [100];
int num = 0;
для (int i = 0; i <count; i ++) {
делать {
// Если сгенерированное число одинаково, продолжайте цикл
num = rand.nextint (100);
} while (bool [num]);
bool [num] = true;
/* list.add (num);* /// Список списка
data [i] = num;
}
вернуть данные;
}
public static void main (string [] args) {
окончательный int count = 10;
int [] data = cantuvate (count);
для (int n: data) {
System.out.print (n+"/t");
}
System.out.println ();
BSROT BSROT = новый BSROT (данные);
пытаться {
int [] a = bsrot.sort (data);
для (int n: a) {
System.out.print (n+"/t");
}
} catch (Exception e) {
// Todo Auto Generated Catch Blach
e.printstacktrace ();
}
}
}
Результаты работы: