算法学习与代码实现4——冒泡排序
这篇博客讲最简单的一个排序算法,也是我生命中接触的第一个排序算法。
算法思路
想当年读大一的时候学习C语言,冒泡排序是C语言课上讲的第一个排序算法,可能也是唯一一个。
思路很有趣,为了确保序列从小到大排列,从最后两个数开始,依次比较相邻的两个数,如果需要交换,就将两个数进行交换。这种比较依次向前,直到前面的数都已经是排好序的数为止。这样一趟一趟的进行比较,每一趟都将最小的数“挤”到最前面。
算法性能
稳定性:稳定排序
时间复杂度: O(n^2)
空间复杂度: O(1)
伪代码
BUBBLESORT(A)
for i <- 1 to length[A]
do for j <- length[A] downto i + 1
do if A[j] < A[j - 1]
then exchange A[j] <-> A[j-1]
算法思路很很简单,就是把小的往前挤。
c语言实现
void bubble_sort(int *array, int size){
int tmp;
for ( int i = 0; i < size; i++ ) {
for ( int j = size - 1; j > i; --j ) {
if ( array[j] < array[j-1] ) {
tmp = array[j];
array[j] = array[j-1];
array[j-1] = tmp;
}
}
}
}