直接插入排序

#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //定义关键字类型
typedef char InfoType[10];
typedef struct          //记录类型
{KeyType key;        //关键字项InfoType data;      //其他数据项,类型为InfoType
} RecType;              //排序的记录类型定义void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{int i,j;RecType tmp;for (i=1; i<n; i++){tmp=R[i];j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置while (j>=0 && tmp.key<R[j].key){R[j+1]=R[j]; //将关键字大于R[i].key的记录后移j--;}R[j+1]=tmp;      //在j+1处插入R[i]}
}

折半插入排序(二分排序)

#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //定义关键字类型
typedef char InfoType[10];
typedef struct          //记录类型
{KeyType key;        //关键字项InfoType data;      //其他数据项,类型为InfoType
} RecType;              //排序的记录类型定义void InsertSort1(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{int i,j,low,high,mid;RecType tmp;for (i=1; i<n; i++){tmp=R[i];low=0;high=i-1;while (low<=high){mid=(low+high)/2;if (tmp.key<R[mid].key)high=mid-1;elselow=mid+1;}for (j=i-1; j>=high+1; j--)R[j+1]=R[j];R[high+1]=tmp;}
}
int main()
{int i,n=10;RecType R[MaxSize];KeyType a[]= {9,8,7,6,5,4,3,2,1,0};for (i=0; i<n; i++)R[i].key=a[i];printf("排序前:");for (i=0; i<n; i++)printf("%d ",R[i].key);printf("\n");InsertSort1(R,n);printf("排序后:");for (i=0; i<n; i++)printf("%d ",R[i].key);printf("\n");return 0;
}
for(int i=0;i<10;++i){int tmp=a[i];int low=0;int hight=i-1;while(low<=hight){mid=(low+hight)/2;if(a[mid]<tmp)low=mid+1;elsehight=mid-1;}//for(int k=i-1;k>=low;--k)a[k+1]=a[k];a[low]=tmp;for(int i=0;i<10;++i)printf("%d ",a[i]);printf(" :%d %d %d\n",low,hight,mid);//每层while循环结束时low=height+1;
    //最后的赋值语句也可以这样:
    //for(int k=i-1;k>=height+1;--k)
    //  a[k+1]=a[k];
    //a[height+1]=tmp;
}
冒泡排序:
void BubbleSort(RecType R[],int n)
{int i,j,k;RecType tmp;for (i=0; i<n-1; i++){for (j=n-1; j>i; j--)   //比较,找出本趟最小关键字的记录if (R[j].key<R[j-1].key){tmp=R[j];  //R[j]与R[j-1]进行交换,将最小关键字记录前移R[j]=R[j-1];R[j-1]=tmp;}printf("i=%d: ",i);for (k=0; k<n; k++)printf("%d ",R[k].key);printf("\n");}
}
//哈哈,贺老改进的冒泡排序:
void BubbleSort1(RecType R[],int n)
{int i,j,k,exchange;RecType tmp;for (i=0; i<n-1; i++){exchange=0;for (j=n-1; j>i; j--)   //比较,找出最小关键字的记录if (R[j].key<R[j-1].key){tmp=R[j];  //R[j]与R[j-1]进行交换,将最小关键字记录前移R[j]=R[j-1];R[j-1]=tmp;exchange=1;}printf("i=%d: ",i);for (k=0; k<n; k++)printf("%d ",R[k].key);printf("\n");if (exchange==0)    //中途结束算法return;}
}
选择排序:
void SelectSort(RecType R[],int n)
{int i,j,k,l;RecType temp;for (i=0; i<n-1; i++)           //做第i趟排序{k=i;for (j=i+1; j<n; j++)   //在当前无序区R[i..n-1]中选key最小的R[k]if (R[j].key<R[k].key)k=j;            //k记下目前找到的最小关键字所在的位置if (k!=i)               //交换R[i]和R[k]{temp=R[i];R[i]=R[k];R[k]=temp;}printf("i=%d: ",i);for (l=0; l<n; l++)printf("%d ",R[l].key);printf("\n");}
}



												

排序算法整理(第十五周实践项目)相关推荐

  1. 第十二周实践项目一--图及存储结构算法库

    代码: 1.头文件:graph.h,包含定义图数据结构的代码.宏定义.要实现算法的函数的声明: <span style="font-size:12px;">#ifnde ...

  2. 第五周实践项目8 8皇后问题的回溯求解_栈结构

    [全文] 回溯法是一种通用的搜索算法,几乎可以用于求解任何可计算的问题.算法的执行过程就像是在迷宫中搜索一条通往出口的路线,总是沿着某一方向向前试探,若能走通,则继续向前进:如果走不通,则要做上标记, ...

  3. 第五周实践项目7 后缀表达式

    基于栈结构,将中缀表达式转换为后缀表达式的算法步骤是: 初始化运算符栈op; 将'='进栈; 从exp读取字符ch; while (ch!='\0') {     if (ch不为运算符)  将后续的 ...

  4. 第五周实践项目6 数制转换(栈)

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目6-把十进制的整数转换为任一进制数输出.提示:要转换为r进制,则 ...

  5. Java设计一个测桃花模块_20145209刘一阳《JAVA程序设计》第十五周补充测试

    第十五周补充测试 1.实验楼Linux中可以通过(ABC)查看用户登录情况. A .who B .who am i C .who mom likes D .who are you 2.在 Linux ...

  6. 左耳听风 第三十五周

    左耳听风 第三十五周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

  7. 信息安全系统设计基础第十五周总结

    信息安全系统设计基础第十五周总结 [内容:链接汇总] 一.每周读书笔记链接汇总 [第一周读书笔记] http://www.cnblogs.com/shadow135211/p/4824555.html ...

  8. 2019年6月6日第十五周体育馆团体预约系统UML软件工程项目日志

    体育馆团体预约系统 UML软件工程项目日志 June,6th ,2019 目录 一. 博客地址 1 二. 客户提交内容 1 三. 项目背景 2 四. 项目范围和前景 2 五. 沟通记录 3 六. 甲方 ...

  9. 补第十五周leetcode算法博客

    补第十五周leetcode算法博客 100. Same Tree Given two binary trees, write a function to check if they are the s ...

最新文章

  1. java并发读取相同的文件_高效读取大文件,再也不用担心 OOM 了!
  2. click事件延迟300ms,处理方法-----FastClick
  3. velocity 遍历map
  4. LeetCode 1111. 有效括号的嵌套深度(奇偶分离)
  5. 在基于对话框的MFC创建状态栏以及添加时间显示
  6. 嵌入式davinci电路元素基础和PWM模块
  7. 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
  8. Python抖音机器人制作!让你有看不完的小姐姐
  9. 不一样的AI:“上天入地”的IBM人工智能
  10. 自动控制原理学习笔记(五)
  11. cad问题小百科 持续更新
  12. java flag 用法_Java中一些常用的方法
  13. irq_desc操作
  14. 左岸读书-你是想读书,还是想读完书?
  15. 怎么恢复格式化的sd卡呢?
  16. C#和VB.net语法对比图_C#教程
  17. python字典统计单词个数_python字典统计单词个数
  18. 国外一些测试网站的分享
  19. 帧计算机术语,请解释一个计算机名词:“帧”,请分别解释“帧”的名称/用途/分类,...
  20. Jmeter 参数化中文乱码问题

热门文章

  1. JavaScript函数的调用
  2. 欢迎大家踊跃报名担当“讲师”
  3. python自动登录校园网 密码_python实现校园网自动登录的示例讲解
  4. 熊猫烧香源代码(转载)
  5. 【HIMI转载推荐之三】新手教程之如何向APP STORE提交应用
  6. 快来看看Google出品的Protocol Buffer,别仅仅会用Json和XML了
  7. 使用cx_freeze打包Python程序
  8. 嵌入式Linux全攻略 ACE程序移植过程详细讲解
  9. Oracle rac进阶管理专家指导系列文档
  10. winform combobox第12345行的数据_Python学习第109课--ndarray的创建和切分操作