本博文源于浙江大学《数据结构》,今天姥姥讲的冒泡排序,让我这种差生来实现还是破费周折,总想着如何快速便捷。却已经进入冒泡的泥淖里。
首先有以下结论还是要记住:
冒泡排序法:
最好情况(n-1):顺序T=O(N)
最坏情况:逆序T=O(N^2)
数据排序后是稳定的
总的关键字比较次数KCN n^2/2
记录移动次数RMN 3n^2/2
平均比较次数和移动次数3n^2/4
算法特点:
- 稳定排序
- 可用于链式存储结构
- 移动记录次数较多,算法平均时间性能比直接插入排序差,当初始记录无序,n较大,算法不宜采用
何谓数据排序后是稳定的?也就是,假设数组有两个小明,小明1在小明2前面,排序完还是小明1在小明2前面就是算法稳定的。
就因为此,我们实现冒泡排序也经与此,附上测试数据
int arr[5] = {5,3,1,6,2};
只有理解你才能写得快
教科书源码
void Bubble_Sort(ElementType A[],int N)
{
int m= 4;
int flag = 1;
while((m>0) && (flag == 1)){
flag = 0;
for(int j =1;j<=m;j++){
if(A[j]>A[j+1]){
flag = 1;
Swap(&A[j],&A[j+1]);
}
}
}
}
教科书完整源码
将数组作为容器进行排序,大家应该可以明白,最后附上冒泡排序源码:
#include<stdio.h>
typedef int ElementType;
void Print_Array(ElementType A[],int N)
{
printf("\n");
for(int i=0;i<N;i++)
printf("%d ",A[i]);
}
void Swap(int *X,int *Y)
{
int tmp = *X;
*X = *Y;
*Y = tmp;
}
void Bubble_Sort(ElementType A[],int N)
{
for(int P = N-1;P>=0;P--)
{
int flag = 0;
for(int i = 0;i<P;i++) {
if(A[i] > A[i+1]) {
Swap(&A[i],&A[i+1]);
flag = 1;
}
}
if(flag == 0) break;
}
}
int main()
{
int arr[5] = {5,3,1,6,2};
Print_Array(arr,5);
Bubble_Sort(arr,5);
Print_Array(arr,5);
return 0;
}