algorithm
Bubble Sort
Ricerca…
Parametri
Parametro | Descrizione |
---|---|
Stabile | sì |
A posto | sì |
La migliore complessità del caso | Sopra) |
Complessità del caso medio | O (n ^ 2) |
Peggiore complessità del caso | O (n ^ 2) |
Complessità dello spazio | O (1) |
Bubble Sort
BubbleSort
confronta ogni successiva coppia di elementi in una lista non ordinata e inverte gli elementi se non sono in ordine.
L'esempio seguente illustra l'ordinamento delle bolle nell'elenco {6,5,3,1,8,7,2,4}
(le coppie confrontate in ogni passaggio sono incapsulate in "**"):
{6,5,3,1,8,7,2,4}
{**5,6**,3,1,8,7,2,4} -- 5 < 6 -> swap
{5,**3,6**,1,8,7,2,4} -- 3 < 6 -> swap
{5,3,**1,6**,8,7,2,4} -- 1 < 6 -> swap
{5,3,1,**6,8**,7,2,4} -- 8 > 6 -> no swap
{5,3,1,6,**7,8**,2,4} -- 7 < 8 -> swap
{5,3,1,6,7,**2,8**,4} -- 2 < 8 -> swap
{5,3,1,6,7,2,**4,8**} -- 4 < 8 -> swap
Dopo un'iterazione nell'elenco, abbiamo {5,3,1,6,7,2,4,8}
. Notare che il massimo valore non ordinato nell'array (8 in questo caso) raggiungerà sempre la sua posizione finale. Quindi, per essere sicuri che la lista sia ordinata, dobbiamo iterare n-1 volte per gli elenchi di lunghezza n.
Grafico:
Implementazione in Javascript
function bubbleSort(a)
{
var swapped;
do {
swapped = false;
for (var i=0; i < a.length-1; i++) {
if (a[i] > a[i+1]) {
var temp = a[i];
a[i] = a[i+1];
a[i+1] = temp;
swapped = true;
}
}
} while (swapped);
}
var a = [3, 203, 34, 746, 200, 984, 198, 764, 9];
bubbleSort(a);
console.log(a); //logs [ 3, 9, 34, 198, 200, 203, 746, 764, 984 ]
Implementazione in C #
Bubble sort è anche conosciuto come Sinking Sort . È un semplice algoritmo di ordinamento che fa ripetutamente scorrere l'elenco per essere ordinato, confronta ogni coppia di elementi adiacenti e li scambia se sono nell'ordine sbagliato.
Esempio di ordinamento a bolle
Implementazione di Bubble Sort
Ho usato il linguaggio C # per implementare l'algoritmo di ordinamento delle bolle
public class BubbleSort
{
public static void SortBubble(int[] input)
{
for (var i = input.Length - 1; i >= 0; i--)
{
for (var j = input.Length - 1 - 1; j >= 0; j--)
{
if (input[j] <= input[j + 1]) continue;
var temp = input[j + 1];
input[j + 1] = input[j];
input[j] = temp;
}
}
}
public static int[] Main(int[] input)
{
SortBubble(input);
return input;
}
}
Implementazione in C & C ++
Un esempio di implementazione di BubbleSort
in C++
:
void bubbleSort(vector<int>numbers)
{
for(int i = numbers.size() - 1; i >= 0; i--) {
for(int j = 1; j <= i; j++) {
if(numbers[j-1] > numbers[j]) {
swap(numbers[j-1],numbers(j));
}
}
}
}
Implementazione C.
void bubble_sort(long list[], long n)
{
long c, d, t;
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (list[d] > list[d+1])
{
/* Swapping */
t = list[d];
list[d] = list[d+1];
list[d+1] = t;
}
}
}
}
Bubble Sort con puntatore
void pointer_bubble_sort(long * list, long n)
{
long c, d, t;
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if ( * (list + d ) > *(list+d+1))
{
/* Swapping */
t = * (list + d );
* (list + d ) = * (list + d + 1 );
* (list + d + 1) = t;
}
}
}
}
Implementazione in Java
public class MyBubbleSort {
public static void bubble_srt(int array[]) {//main logic
int n = array.length;
int k;
for (int m = n; m >= 0; m--) {
for (int i = 0; i < n - 1; i++) {
k = i + 1;
if (array[i] > array[k]) {
swapNumbers(i, k, array);
}
}
printNumbers(array);
}
}
private static void swapNumbers(int i, int j, int[] array) {
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
private static void printNumbers(int[] input) {
for (int i = 0; i < input.length; i++) {
System.out.print(input[i] + ", ");
}
System.out.println("\n");
}
public static void main(String[] args) {
int[] input = { 4, 2, 9, 6, 23, 12, 34, 0, 1 };
bubble_srt(input);
}
}
Implementazione Python
#!/usr/bin/python
input_list = [10,1,2,11]
for i in range(len(input_list)):
for j in range(i):
if int(input_list[j]) > int(input_list[j+1]):
input_list[j],input_list[j+1] = input_list[j+1],input_list[j]
print input_list