6.交换排序——冒泡排序

交换排序是交换元素的位置。
本文针对交换排序中的冒泡排序。
第一次冒泡将n个数据中的最大的数据放到最后一个位置,第二次冒泡将前n-1个数据中的最大的数据放到倒数第二个位置……
因此需要比较1+2+……+(n-1)次,时间复杂度是O(n的平方)。

 

 

程序:

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 50
#define N 15

typedef struct{
	int key;
	int other;
}node;

typedef struct
{
	node array[MAXSIZE];
	int length;
}list;


//冒泡排序
void bubble_sort(list *l,int n)
{
	int i,j,ok;
	node temp;
	for(i = n - 1,ok = 1;i > 1 && ok;--i){  //ok可以少做没必要的比较,即未排序的已经有序了就不用再比较了
		ok = 0;
		for(j = 0;j < i;++j)
			if(l->array[j].key > l->array[j + 1].key){
				temp = l->array[j];
				l->array[j] = l->array[j + 1];
				l->array[j + 1] = temp;
				ok = 1;
			}
	}
}

void print(list *l)
{
	int i;
	for(i = 1;i < l->length;i++)
		printf("%d %d\t",l->array[i].key,l->array[i].other);
	printf("\n");
}

 
void main()
{
	node data[N]={{5,6},{13,5},{22,2},{2,4},{6,5},{99,7},{6,15},{1,22},{15,12},{58,12},{48,40},{26,48},{38,35},{72,58},{61,22}};
	list l;
	int i;

	for(i = 0;i < N;i++)
    	l.array[i] = data[i];
    l.length = N;
    
	printf("befor sort:\n");
	print(&l);
	
	bubble_sort(&l,N);
	printf("after bubble sort:\n");
	print(&l);
}


结果:

[11:00:59]# ./c
befor sort:
13 5    22 2    2 4     6 5     99 7    6 15    1 22    15 12   58 12   48 40   26 48   38 35   72 58   61 22
after bubble sort:
2 4     5 6     6 5     6 15    13 5    15 12   22 2    26 48   38 35   48 40   58 12   61 22   72 58   99 7


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值