C语言 排序算法总结
#include<stdio.h>
#include<stdlib.h>
//作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
#define N 20
//冒泡排序
void bubble(int a[],int n){
int i,j,temp;
for(i=;i<n-;i++){
for(j=;j<n--i;j++){
if(a[j]>a[j+]){
temp=a[j];
a[j]=a[j+];
a[j+]=temp;
}
}
}
} //选择排序
void select(int a[],int n){
int i,j,min,temp;
for(i=;i<n-;i++){
min=i;
for(j=i+;j<n;j++){
if(a[j]<a[min]){
min=j;
}
}
if(min!=i){
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
//直接插入排序
void insert(int a[],int n){
int i,j,temp;
for(i=;i<n;i++){
temp=a[i];
j=i-;
while((temp<a[j]) && (j>=)){
a[j+]=a[j];
j--;
}
a[j+]=temp;
}
}
//折半插入排序
void bi_insert(int a[],int n){
int i,j,low,high,mid,temp;
for(i=;i<n;i++){
temp=a[i];
low=;
high=i-;
while(low<=high){
mid=(low+high)/;
if(a[mid]>temp){
high=mid-;
}
else
low=mid+;
}
for(j=i-;j>=high+;--j){
a[j+]=a[j];
}
a[high+]=temp;
}
}
//堆排序
void sift(int a[],int low,int high){
int i=low,j=i*,t=a[i];
while(j<=high){
if(j<high && a[j]<a[j+]){
++j;
}
if(t<a[j]){
a[i]=a[j];
i=j;
j=*i;
}
else
break;
}
a[i]=t;
} void heap(int a[],int n){
int i,temp;
for(i=n/;i>=;--i){
sift(a,i,n);
}
for(i=n;i>=;--i){
temp=a[i];
a[i]=a[];
a[]=temp;
sift(a,,i-);
}
} void main(){
int a[N];
int i,k,m;
printf("Please input a number:");
scanf("%d",&m);
printf("Please input %d numbers:\n",m);
for(i=;i<m;i++){
scanf("%d",a+i);
}
while(){
printf("1.冒泡排序\n2.选择排序\n3.直接插入排序\n4.折半插入排序\n5.堆排序\n0.exit\nPlease choose:");
scanf("%d",&k);
switch(k)
{
case : bubble(a,m);break;
case : select(a,m);break;
case : insert(a,m);break;
case : bi_insert(a,m);break;
case : heap(a,m-);break;
case : printf("Byebye!\n");system("pause");exit();
default :printf("Input error!\nPlease choose again:\n");continue;
}
printf("Result:\n");
for(i=;i<m;i++){
printf("%4d",a[i]);
}
printf("\n");
}
system("pause");
}
结果为:
C语言 排序算法总结的更多相关文章
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
- C语言排序算法复习
排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...
- C语言排序算法学习笔记——插入类排序
排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...
- C语言 排序算法
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来. 过程演示: 选 ...
- c语言排序算法总结
一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) { int gap,i,j, ...
- C语言排序算法学习笔记——交换类排序
交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...
- 两种常用的C语言排序算法
1. 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 解决方法:选择排序法 实现代码如下: #include &l ...
- C语言排序算法
(1)“冒泡法” 冒泡法大家都较熟悉.其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n].同理对a[1],a[2],...a[n-1]处理,即 ...
- C语言排序算法学习笔记——选择类排序
选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...
随机推荐
- Ansible基础认识及安装使用详解(week5_day1_part1)--技术流ken
Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量 ...
- cobbler单台服务器实现批量自动化安装不同版本系统-技术流ken
前言 在上一篇博文<cobbler批量安装系统使用详解-技术流ken>中已经详细讲解了cobbler的使用以及安装,本篇博文将会使用单台cobbler实现自动化批量安装不同版本的操作系统. ...
- Spring Cloud Config采用Git存储时两种常用的配置策略
由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...
- HTML+CSS基础(1)-理解什么是HTML和CSS
什么是HTML w3c的解释如下: HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种 ...
- 结构型---桥接模式(Bridge Pattern)
定义 桥接模式即将抽象部分与实现部分脱耦,使它们可以独立变化.桥接模式的目的就是使两者分离,根据面向对象的封装变化的原则,我们可以把实现部分的变化封装到另外一个类中,这样的一个思路也就是桥接模式的实现 ...
- IDEA更换主题
更换IDEA主题只需要3步 1. 下载主题 在主题网站上IDEA Color Themes 上浏览喜欢的主题并下载该主题.(如果网址有变更,google IDEA themes即可.) 2. 导入主 ...
- linux系统mysql主从配置
一.原理 mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到slave; 3) slave有一个I/O线程把mast ...
- (一):C++分布式实时应用框架----整体介绍
C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework) 版权声明:本文版权及所用技术归属smartguys团队所有,对于抄袭,非经 ...
- CSS概念【记录】
1.CSS语法 2.@规则 3.注释 4.层叠 5.优先级 6.继承 7.值 8.块格式化上下文 9.盒模型 10.层叠上下文 11.可替换元素 12.外边距合并 13.包含块 14.视觉格式化模型 ...
- 初识HTTP协议web开发
HTTP协议 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的 ...