6.交换排序——冒泡排序
来源:互联网 发布:windows phone官方 编辑:程序博客网 时间:2024/06/08 03:56
交换排序是交换元素的位置。
本文针对交换排序中的冒泡排序。
第一次冒泡将n个数据中的最大的数据放到最后一个位置,第二次冒泡将前n-1个数据中的最大的数据放到倒数第二个位置……
因此需要比较1+2+……+(n-1)次,时间复杂度是O(n的平方)。
程序:
#include <stdio.h>#include <stdlib.h>#define MAXSIZE 50#define N 15typedef 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]# ./cbefor 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 22after 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
- 6.交换排序——冒泡排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- 交换类排序——冒泡排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- 交换排序——冒泡排序
- 排序算法之交换排序——冒泡排序
- 排序:交换排序——冒泡排序法
- 排序——交换排序之冒泡排序
- 交换排序(冒泡排序—改进、快速排序)
- 交换排序:冒泡排序
- 交换排序-冒泡排序
- 交换排序-冒泡排序
- 交换排序-冒泡排序
- 冒泡排序-交换排序
- java ip to int
- Round #232 (Div. 2)_A
- 判断是否是通过手机访问
- spring3.1缓存详解
- PHP代码优化 成员变量获取速度对比
- 6.交换排序——冒泡排序
- 工厂方法模式
- C++编译器与链接器工作原理
- jquery获取不到图片的高度 需要在window.onload=function后才能获取到
- 人际交往十大黄金法则
- Linux - socket编程处理EINTR错误
- struts2-action
- 用指针的指针处理字符串
- SharePoint2010新特性:InfoPath定义创建列表的界面