#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语言 排序算法总结的更多相关文章

  1. C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

    C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...

  2. C语言排序算法复习

    排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...

  3. C语言排序算法学习笔记——插入类排序

    排序就是讲原本无序的序列重新排序成有序的序列.序列里可以是一个单独数据,也可以是多个数据组合的记录,按照记录里的主关键字或者次关键字进行排序. 排序的稳定性:如果排序表中有两个元素R1,R2,其对应的 ...

  4. C语言 排序算法

    冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来. 过程演示: 选 ...

  5. c语言排序算法总结

    一.希尔(Shell)排序法 /* Shell 排序法 */ #include <stdio.h> void sort(int v[],int n) {      int gap,i,j, ...

  6. C语言排序算法学习笔记——交换类排序

    交换类排序:根据序列中两个元素关键字的比较结果来交换他俩在序列中的位置. 冒泡排序:假设待排序表长为n,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i])则交换他们 ...

  7. 两种常用的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 ...

  8. C语言排序算法

    (1)“冒泡法” 冒泡法大家都较熟悉.其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n].同理对a[1],a[2],...a[n-1]处理,即 ...

  9. C语言排序算法学习笔记——选择类排序

    选择排序:每一趟(例如第i趟)在后面n-i+1(i=1,2,3,……,n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到n-1趟做完,待排序元素只剩下1个,就不用再选了. 简 ...

随机推荐

  1. 记录.net使用ueditor富文本编辑器

    UEditor是什么 最近在在项目的时候使用到了百度的富文本编辑器.官网有详细的操作流程文档.这里我只是记录项目中常用到的一些事件.以便日后可以方便查询. UEditor是百度的一个javascrip ...

  2. Docker虚拟机实战

    安装Docker虚拟机 ◆ 先更新yum软件管理器,然后再安装Docker    #更新yum软件管理器    yum -y update    #安装Docker    yum install -y ...

  3. 推送GitHub报错 fatal: Out of memory, malloc failed 解决办法

    现象: 推送GitHub时,出现如下报错 fatal: Out of memory, malloc failed (tried to allocate XXXXXX bytes)error: fail ...

  4. Thinkphp table doesn't exist

    系统采用Tp3.2的改造....集群为Mysql双工模式:平时M()主要是操作写,MS操作读...今天在查询 $res =MS("user u")->join("{ ...

  5. java时间类Date、Calendar及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

  6. 22.QT-QXmlStreamReader解析,QXmlStreamWriter写入

    XML介绍 XML 用于存储数据,数据的形式类似于树结构(参考: http://www.runoob.com/xml/) 示例如下 <?xml version="1.0" e ...

  7. 5.QT-QString类

    Qt中的字符串类 介绍 采用Unicode编码  采用隐式共享技术,节省内存和不必要的数据拷贝 隐式共享介于浅拷贝和深拷贝之间,当两个string对象赋值时,会实现浅拷贝(共享一块内存),如果某个对象 ...

  8. 【Java每日一题】20170214

    20170213问题解析请点击今日问题下方的“[Java每日一题]20170214”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...

  9. C#设计模式之五原型模式(Prototype Pattern)【创建型】

    一.引言 在开始今天的文章之前先说明一点,欢迎大家来指正.很多人说原型设计模式会节省机器内存,他们说是拷贝出来的对象,这些对象其实都是原型的复制,不会使用内存.我认为这是不对的,因为拷贝出来的每一个对 ...

  10. 详解Vue.js 技术

    本文主要从8个章节详解vue技术揭秘,小编觉得挺有用的,分享给大家. 为了把 Vue.js 的源码讲明白,课程设计成由浅入深,分为核心.编译.扩展.生态四个方面去讲,并拆成了八个章节,如下: 准备工作 ...