冒泡排序(Bubble Sort)
冒泡排序作为排序中的经典算法,其思想是非常具有意义的,同时也是面试官很经常提问面试者的考题。
它的基本思想是:两两比较相邻的记录的关键字,如果反序则交换,知道没有反序的记录为止。
案例分析
假设我要对这么一个数组进行排序:
9,1,5,8,3,7,4,6,2
冒泡图:
冒泡顾名思义就是从下往上冒,因此我们的循环从底开始,即从2开始。
第一轮,2先与6比较,2小于6,因此2与6交换位置。2小于4,2与4交换位置,以此类推,第一轮冒泡后的结果是:1,9,2,5,8,3,7,4,6
第二轮,6与 4比较,6大于4,不交换位置。4与7比较,7大于4,7和4交换位置,以此类推,第二轮冒泡结果:1,2,9,3,5,8,4,7,6
第三轮,6与7比较,7大于6,交换位置。4与6比较,不交换位置。8与4比较,交换位置,以此类推,第三轮冒泡结果为:1,2,3,9,4,5,8,6,7
第四轮,7与6比较,不交换位置。6与8比较,交换位置。5与6比较,不交换位置。知道9与4比较,交换位置,第四轮冒泡结果为:1,2,3,4,9,5,6,8,7
第五轮,基本完成排序,只需要循环把9交换至最后一个即可。
最终的冒泡结果为:
1,2,3,4,5,6,7,8,9
代码实现
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
typedef struct
{
int r[MAXSIZE];
int length;
}SqList;
//交换函数
void swap(SqList *L, int i, int j){
int temp = L->r[