(C语言浙大版)实现冒泡排序(附测试用例)

本博文源于浙江大学《数据结构》,今天姥姥讲的冒泡排序,让我这种差生来实现还是破费周折,总想着如何快速便捷。却已经进入冒泡的泥淖里。
首先有以下结论还是要记住:

冒泡排序法:
最好情况(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;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值