冒泡排序本是大家都很熟悉的一种排序,教科书也到处都是,今天突然在维基百科中看到还有一种优化的 bubble sort算法,不得不感慨是温故知新啊
数据结构 array
算法推演:
两种bubble的伪代码
procedure bubbleSort( A : list of sortable items )
n = length(A)
for i = 0 to n - 1
for j = 1 to n-1
if A[j-1] > A[j] then
swap( A[j-1], A[j] )
end if
end for
end for
end procedure
//优化后的算法
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
if A[i-1] > A[i] then
swap(A[i-1], A[i])
swapped = true
end if
end for
n = n - 1
until not swapped
end procedure
#include <stdio.h>
void bubbleSort(int *arr, int length) {
int i, j, tmp;
for (i = 0; i < length - 1; i ++) {
for (j = 0; j < length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main(int argc, char *argv[]) {
int arr[] = {9, 6, 5, 4, 2, 8};
for (int i = 0; i < 6; i++) {
printf("i=%d\n", arr[i]);
}
bubbleSort(arr, 6);
printf("sort ok\n");
for (int i = 0; i < 6; i++) {
printf("i=%d\n", arr[i]);
}
return 0;
}
#include <stdio.h>
void optimize_bubble(int *arr, int length) {
int i, tmp;
while (1) {
int isSwap = 0;
for (i = 0; i < length - 1; i++) {
if (arr[i] > arr[i + 1]) {
tmp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = tmp;
isSwap = 1;
}
}
if (isSwap == 0) {
break;
}
}
}
int main(int argc, char *argv[]) {
int arr[] = {9, 8, 4, 5,29, 35, 2, 3, 7};
optimize_bubble(arr, 7);
for (int k = 0; k < 7; k++) {
printf("k=%d\n", arr[k]);
}
return 0;
}