顺序表的冒泡排序算法及二分法查找代码实现
2016-05-06 18:32
399 查看
本文主要实现了比较经典的冒泡排序算法(对已经有序或者基本有序的顺序表复杂度大大降低),和二分法查找,各位看官看代码吧
结果:
//冒泡排序算法及二分法查找 #include "stdio.h" typedef struct { int key; }SSTable_Elem_Type; typedef struct { SSTable_Elem_Type*elem; int length; }SSTable_Typedef; void Bubble_Sort(SSTable_Typedef*ST) { unsigned char i = 0, j = 0; unsigned char finish_flag = 0;//0:完成排序的 SSTable_Elem_Type tmp; for (i = 0; i < ST->length; i++) { finish_flag = 1;//假设完成了排序 for (j = 0; j < ST->length - i - 1; j++) { if (ST->elem[j].key>ST->elem[j + 1].key) { finish_flag = 0; //交换数据 tmp = ST->elem[j];//每次都取最大的 ST->elem[j] = ST->elem[j + 1]; ST->elem[j + 1] = tmp; } } if (finis 4000 h_flag == 1)//一趟冒泡排序没有发生交换,说明已经有序已经完成排序 break; printf("sorting\r\n "); } } //初始化顺序表 void Init_SSTable(SSTable_Typedef* SSTable, SSTable_Elem_Type*buf, int len) { SSTable->elem = buf; SSTable->length = len; } //折半查找 //buf 已经排序 int bisearch(SSTable_Typedef* SSTable,int search_data) { int low = 0; int high=SSTable->length-1; int mid; while (low <= high) { mid = (low + high) / 2; if (search_data == SSTable->elem[mid].key) return (mid+1); else if (search_data < SSTable->elem[mid].key) high = mid - 1; else low = mid + 1; } return 0; } #define len 5 int main(void) { SSTable_Typedef ST; SSTable_Elem_Type ST_Elem[10]; int i = 0; Init_SSTable(&ST, ST_Elem, 10); for (i = 0; i < 10; i++) { ST_Elem[i].key = 10-i; } printf("unsorted:"); for (i = 0; i < 10; i++) { printf("%d ", ST.elem[i].key); } Bubble_Sort(&ST); printf("\r\nsorted:"); for (i = 0; i < 10; i++) { printf("%d ", ST.elem[i].key); } printf("%d",bisearch(&ST, -11) ); printf("\r\n"); while (1); return 0; }
结果:
相关文章推荐
- 冒泡排序
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- C++实现对输入数字组进行排序
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总