2019独角兽企业重金招聘Python工程师标准>>>

###冒泡排序

/*** 冒泡排序 logN^2* 基本思路:每次从数组底端将最小的数“冒”上来* **/
void BubbleSort(int *p, int len){for(int i=0; i<len-1; i++){for(int j=len-1; j>i; j--){if(*(p+j)<*(p+j-1)){*(p+j) ^= *(p+j-1);*(p+j-1) ^= *(p+j);*(p+j) ^= *(p+j-1);}}}
}

###选择排序

/*** 选择排序 logN^2**/
void SelectSort(int *p, int len){for(int i=0; i<len-1; i++){int min = i;for(int j=len-1; j>i; j--){if(*(p+j)<*(p+min)) min = j;}if(min != i){*(p+i) ^= *(p+min);*(p+min) ^= *(p+i);*(p+i) ^= *(p+min);}}
}

###插入排序

/*** 插入排序 logN^2**/
void InsertSort(int *p, int len){for(int i=0; i<len-1; i++){for(int j=i+1; j>0; j--){if(*(p+j)<*(p+j-1)){*(p+j) ^= *(p+j-1);*(p+j-1) ^= *(p+j);*(p+j) ^= *(p+j-1);}else break;}}
}

###希尔排序

 /*** 希尔排序 N^1.5* 基本思路:选取某个增量,将数组分为若干的子序列,对子序列进行插入排序,* 逐渐减小增量,重复上述操作,直到增量为1,此时数组基本有序,最后进行一次插入排序。**/
void ShellSort(int *p, int len){for(int incre=len/2; incre>=1; incre--){for(int i=0; i<incre; i++){for(int j=i+incre; j<len; j+=incre){for(int k=j; k>i; k-=incre){if(*(p+k)<*(p+k-incre)){*(p+k) ^= *(p+k-incre);*(p+k-incre) ^= *(p+k);*(p+k) ^= *(p+k-incre);}else break;}}}}
}

###快速排序

/*** 快速排序 N*logN**/void QuickSort(int *p, int len){if(len<=1) return;int *b = p;int *e = p + len - 1;int sentry = *p;while(b<e){while(b<e && *e >= sentry) e--;*b = *e;while(b<e && *b <= sentry) b++;*e = *b;}*b = sentry;QuickSort(p, b-p);QuickSort(b+1, len-(b-p)-1);}

###归并排序

/*** 归并排序 N*logN* 需要额外的空间存放数据* 基本思想:将一个数组分成两份,如果这两份数组的有序的,那么将这两份数组归并,* 对上述操作进行递归操作,直到分成的数组仅仅只有一个元素,那么它理所当然是有序的。**/
void MergeArray(int *p, int len1, int *q, int len2){int temp[len1+len2];int i,j,k;i = j = k = 0;while(i<len1 && j<len2){if(*(p+i)<*(q+j)){temp[k++] = *(p+i++);}else{temp[k++] = *(q+j++);}}while(i<len1) temp[k++] = *(p+i++);while(j<len2) temp[k++] = *(q+j++);for(i=0; i<len1+len2; i++) *(p+i) = temp[i];
}void MergeSort(int *p, int len){if(len<=1) return;int middle = len/2;MergeSort(p, middle);MergeSort(p+middle, len-middle);MergeArray(p, middle, p+middle, len-middle);
}

###堆排序

/*** 堆排序 N * logN* len/2 -1 最后一个节点的父节点* 2*i + 1 左孩子节点* 2*i + 2 右孩子节点* 基本思路:将一个数组看作是完全二叉树,先调整整个堆,然后将根节点和* 末节点互换,重新调整堆**/
void HeapAdjust(int *p, int len, int i){int child = 2*i+1;if(child>=len) return;if(child<len-1 && *(p+child)<*(p+child+1)) child++;if(*(p+i)<*(p+child)){*(p+i) ^= *(p+child);*(p+child) ^= *(p+i);*(p+i) ^= *(p+child);HeapAdjust(p, len, child);}
}void HeapSort(int *p, int len){//首先先从最后一个节点的父节点开始调整堆for(int i=len/2-1; i>=0; i--) HeapAdjust(p, len, i);for(int i=len-1; i>0; i--){*p ^= *(p+i);*(p+i) ^= *p;*p ^= *(p+i);HeapAdjust(p, i, 0); // <--not i+1}
}

转载于:https://my.oschina.net/ClaireChris/blog/818098

基本排序(C语言版)相关推荐

  1. long logn的大小c语言,基本排序(C语言版) - ________MX的个人页面 - OSCHINA - 中文开源技术交流社区...

    ###冒泡排序 /** * 冒泡排序 logN^2 * 基本思路:每次从数组底端将最小的数"冒"上来 * **/ void BubbleSort(int *p, int len){ ...

  2. 数据结构(C语言版) 第 八 章 排序 知识梳理 + 习题详解

    目录 一.归并排序 二.交换排序 1.快速排序 2.冒泡排序 三.插入排序 1.直接插入排序(基于顺序查找) 2.折半插入排序(基于折半查找) 3.希尔排序(基于逐趟缩小增量) 四.选择排序 0.直接 ...

  3. 数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告

    <数据结构二叉排序树实验报告>由会员分享,可在线阅读,更多相关<数据结构二叉排序树实验报告(7页珍藏版)>请在装配图网上搜索. 1.实验报告课程名:数据结构(C语言版)实验名: ...

  4. C语言版动态通讯录(增、删、改、查(查重)、去重、排序、导出)

    C语言版动态通讯录(增.删.改.查(查重).去重.排序.导出) 一段学习过后,想写小东西加深下印象和理解,便开始了我的动态通讯录之旅. 整体框架及实现 通讯录主体 typedef struct con ...

  5. 经典的十种排序算法 C语言版

    经典的十种排序算法(C语言版) 1.冒牌排序 冒牌排序的特点 ​ 一趟一趟的比较待排序的数组,每趟比较中,从前往后,依次比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数,每趟比较后, ...

  6. <排序>《数据结构(C语言版)》

    目录 <数据结构(C语言版)>之排序实现 --By 作者:新晓·故知 排序性能测试对比: 1.排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 2.常见排序算法 ...

  7. 选择排序算法详解之C语言版

    一.算法原理 选择排序属于不稳定排序法,是一种常用的排序算法,其时间复杂度为O(n^2). 所谓的不稳定排序算法是指在一组数据中存在多个相同的数据,但是在排序之后,相同数据的前后位置会发生改变.例如有 ...

  8. C语言选择排序(函数版)

    C语言选择排序(函数版) 代码 //排序 #include<stdio.h> //数组大小为10,可根据需要自行修改 #define N 10//选择排序函数 void select_so ...

  9. 资料分享:送你一本《数据结构(C语言版)》电子书!

    要想写出可复用.可扩展.易维护.灵活性好的代码,「数据结构」这一关必须要过啊! 在数据结构与算法的众多教材中,奉为经典的当属清华大学严蔚敏老师的著作.很多学校也选择这本书作为考研指定教材. 正在学习数 ...

最新文章

  1. iot架构 mqtt netty_Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上
  2. ssm框架restful风格实现增删改查
  3. MySQL的简单使用-(一)
  4. 读书-算法《程序设计导引及在线实践》-简单计算题5:装箱问题
  5. 【译】Build Knowledge Graph from unstructured corpus using Machine Learning
  6. linux下怎么编译运行C语言程序?
  7. kmeans算法中的sse_聚类算法入门:k-means
  8. new URI(zk_servers_1) 路径包含下划线无法获取host的问题
  9. 以下不属于时序逻辑电路的有_静态时序分析圣经翻译计划——附录B:SDF
  10. WinForm窗体生命周期
  11. Qt Qt5.15+Xcode12+BigSur macOS及iOS开发环境搭建
  12. 两个栈实现一个队列以及两个队列实现一个栈(Java)
  13. Strange Country II 【ZOJ - 3332】【竞赛图求解哈密顿通路】
  14. 微波射频学习笔记9--------品质因数Q值的意义
  15. 基于AOP的优惠券发送异常哨兵监控
  16. Xcode info.plist各种key
  17. 你是资讯控吗?——Web2.0智识管理简册
  18. Core Java练习题
  19. 淘宝API 商品详情接口 - 外贸多语翻译商品详情店铺分类开放平台接口
  20. Android,找工作,月薪2万怎么做?

热门文章

  1. 计算机审计操作实验目的,计算机审计实验报告 满分原创!!.docx
  2. oracle实例包括哪几部分,数据库的实例组成部分及作用是什么?一个oracle数据库可以有多个实例吗?...
  3. ISE中UCF约束文件的编写
  4. unity怪物攻击玩家减血_怪物猎人发布15周年 — 回顾历代封面怪之三大传奇怪物...
  5. 实现 消息提醒图标_Mac 上自带的「提醒事项」千万别错过
  6. nginx ngx_http_index_module(默认初始页)
  7. php扇形分布图,使用php绘制扇形分布图
  8. 32乘法运算_算术运算指令
  9. 网络安全之等级保护问题集
  10. ERP核心业务流程和Oracle-ERP业务和数据对象分析