冒泡排序、插入排序、快速排序、选择排序、归并排序以及折半查找
五种简单的排序方法 冒泡、插入、快速、选择、归并排序以及最基础的折半查找
//冒泡排序 选择排序 插入排序 快速排序 归并排序 折半查找
//纯c语言实现 适合新学者
#include<stdio.h>
#include<stdlib.h>
//冒泡排序
void bubble_sort(int value[], int size)
{
int i, j, temp;
for(i = 0; i < size; i++)
{
for(j =0; j < size - 1 - i; j++)
{
if(value[j] < value[j+1])
{
temp = value[j];
value[j] = value[j+1];
value[j+1] = temp;
}
}
}
}
//选择排序
void choice_sort(int value[], int size)
{
int i, j, min, temp;
for(i = 0 ; i < size; i++)
{
min = i;
for(j = i; j < size; j++)
{
if(value[min] < value[j])
{
min = j;
}
}
temp = value[i];
value[i] = value[min];
value[min] = temp;
}
}
void insert_sort(int value[], int size) //插入排序
{
int i, j, temp;
五种简单的排序方法 冒泡、插入、快速、选择、归并排序以及最基础的折半查找
for(i = 0; i < size; i++)
{
temp = value[i];
for(j = i - 1; j >= 0; j--)
{
if(temp > value[j])
{
value[j+1] = value[j];
}
else //一旦找到了插入的地方, 就立即停止寻找
break;
}
value[j+1] = temp;
}
}
void quick_sort(int value[], int *p_start, int *p_end) //快速排序
{
int *p_head = p_start;
int *p_tail = p_end;
int temp = *p_start;
while(p_head < p_tail)
{
if(*p_head < *p_tail)
{
int t = *p_head;
*p_head = *p_tail;
*p_tail = t;
}
if(temp == *p_head)
{
p_tail--;
}
else
p_head++;
}
if(p_start == p_end)
return;
else
{
quick_sort(value, p_start + 1, p_end);
quick_sort(value, p_start, p_end - 1);
}
}
五种简单的排序方法 冒泡、插入、快速、选择、归并排序以及最基础的折半查找
void merge_sort(int *value, int start, int end , int *p_temp) //归并排序
{
if(start >= end)
return ;
else
{
int mid = (start + end) / 2 + 1;
merge_sort(value, start, mid - 1, p_temp); //必须先调用递归 才能够进行选择归并
merge_sort(value, mid, end, p_temp);
int first = start;
int second = mid;
int temp = start;
while(first < mid || second <= end)
{
if(first == mid)
{
p_temp[temp] = value[second];
temp++;
second ++;
}
else if(second > end)
{
p_temp[temp] = value[first];
first ++;
temp++;
}
else if(value[first] > value[second])
{
p_temp[temp] = value[first];
first ++;
temp++;
}
else
{
p_temp[temp] = value[second];
temp++;
second++;
}
}
for(int i = start; i <= end; i++)
value[i] = p_temp[i];
}
}
五种简单的排序方法 冒泡、插入、快速、选择、归并排序以及最基础的折半查找
int *search(int value, int *p_start, int *p_end) //折半查找 {
if(p_start > p_end)
return NULL;
else if(p_start == p_end)
{
if(*p_start == value)
return p_start;
else
return NULL;
}
else
{
int *mid = p_start + (p_end - p_start) / 2; if(*mid < value)
return search(value, p_start, mid - 1); 大到小还是小到大
else if(*mid > value)
return search(value, mid + 1, p_end); else
return mid;
}
}
int main()
{
int value1[10];
int value[] = {2, 4, 6, 5, 7, 0, 9, 8, 1, 3};
bubble_sort(value, 10);
//choice_sort(value, 10);
//quick_sort(value, value, value + 9);
//insert_sort(value, 10);
//merge_sort(value, 0,9, value1);
//printf("%d\n", *search(8, value, value + 9)); for(int i = 0; i < 10; i++)
printf("%d ", value[i]);
printf("\n");
return 0;
} //一定要注意原始数据的排序方式 是
…… 此处隐藏:784字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




