一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)
#include <stdlib.h>
#include <string.h>
#include "sort.h" //冒泡排序
int bubbleSort(int a[], int n)
{
int i, j;
for (i=n-; i>=; i--)
{
for (j=; j<i; j++)
{
if (a[j]>a[j+])
{//交换a[i]和a[j],也可使用临时变量实现
a[j] += a[j+];
a[j+] = a[j] - a[j+];
a[j] = a[j] - a[j+];
}
}
}
return ;
} /***********编译器自带快排************/
int cmp(const void * a, const void * b)
{
return *(int *)a - *(int *)b;
} int quickSortC(int a[], int n)
{
qsort(a, n, sizeof(a[]), cmp);
return ;
}
/***********编译器自带快排************/ //直接插入排序
int insertSort(int a[], int n)
{
int i, j, k, tmp;
for (i=; i<n; i++)
{
for (j=; j<i; j++)
{
if (a[i]<a[j])//insert a[i] before a[j]
{
tmp = a[i];
for (k=i; k>j; k--)
{
a[k] = a[k-];
}
a[j] = tmp;
}
}
}
return ;
} //希尔排序(无监视哨,迭代,也可递归实现)
int shellSort(int a[], int n)
{
int i, j, k, tmp, group = , step = n/;
while (step > )
{
for (i=group+step; i<n; i+=step)
{
tmp = a[i];
for (j=group; j<i; j+=step)
{
if (a[j]>a[i])
{
for (k=i; k>j; k-=step)
{
a[k] = a[k-step];
}
a[j] = tmp;
}
}
}
step /= ;
}
return ;
} /*
归并排序,鼓捣了半天,还是写成两个子函数的明了
*/
int merge(int a[], int m, int b[], int n, int arr[])
{
int i=, j=, k=;
while (i<m && j<n)
{
arr[k++] = a[i]<b[j] ? a[i++] : b[j++];
}
if (i<m)
{
memcpy(&arr[k], &a[i], (m-i)*sizeof(int));
}
else if(j<n)
{
memcpy(&arr[k], &b[j], (n-j)*sizeof(int));
}
return ;
} int mergeSort(int a[], int len)
{
int i, j, k, step, g1, g2, m, n;
int * arr = (int *)malloc(sizeof(int)*len); for (step=; step<=len; step<<=)
{//
g1 = ;
g2 = g1 + step;
k = ;
memcpy(arr, a, len*sizeof(int));
for (i=g1,j=g2; g1<len; g1=g2+step, g2=g1+step)
{
//先处理不足两组的情况,即g2>=len的情况
m = g2<len ? step : len-g1;
n = g2+step<len ? step : len-g2;
if (g2>=len)//剩余末尾分组
{
memcpy(&a[k], &arr[g1], m*sizeof(int));
k += m;
break;
}
if(merge(&arr[g1], m, &arr[g2], n, &a[k]))
{
free(arr);
return ;
}
k += m+n;
}
}
free(arr);
return ;
}
一些数组排序算法的简单实现(冒泡、插入、希尔、归并和qsort)的更多相关文章
- java实现的排序(插入/希尔/归并)
java实现三种简单的排序,以下是代码: /*插入排序*/ public static void insertionSort(int[] a) { int j; for(int p = 1; p &l ...
- [java初探06]__排序算法的简单认识
今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...
- 左神算法第一节课:复杂度、排序(冒泡、选择、插入、归并)、小和问题和逆序对问题、对数器和递归(Master公式)
第一节课 复杂度 排序(冒泡.选择.插入.归并) 小和问题和逆序对问题 对数器 递归 1. 复杂度 认识时间复杂度常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- 使用C语言实现二维,三维绘图算法(3)-简单的二维分形
使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- 1101: 零起点学算法08——简单的输入和计算(a+b)
1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitt ...
- java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)
为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储 ...
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
随机推荐
- intellIJ IDEA学习笔记2
常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 例如要输入for(User user : users)只需输入user.f ...
- 章节十六、1-TestNG简介
一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...
- Windows Server 2008配置系统安全策略
下面学习Windows Server 2008配置系统安全策略 在工作组中的计算机本地安全策略有 用户策略,密码策略,密码过期默认42天 服务账户设置成永不过期,帐户锁定策略,本地策略,审核策略,计算 ...
- Raven 2 靶机渗透
0X00 前言 Raven 2中一共有四个flag,Raven 2是一个中级boot2root VM.有四个标志要捕获.在多次破坏之后,Raven Security采取了额外措施来强化他们的网络服务器 ...
- python实例:利用jieba库,分析统计金庸名著《倚天屠龙记》中人物名出现次数并排序
本实例主要用到python的jieba库 首先当然是安装pip install jieba 这里比较关键的是如下几个步骤: 加载文本,分析文本 txt=open("C:\\Users\\Be ...
- IT人不仅要提升挣钱能力,更要拓展挣钱途径
前几天我上班路上,和小区门口开车的师傅闲聊,发现他们虽然学历不高,但挣钱的途径不少,比如固定接送多位客户,然后能通过朋友圈拓展新客户,而且通过客户口口相传,也能不断拉到生意,算下来每月也能挣1万5出头 ...
- python 24 封装、多态
目录 1. 封装.多态 2. 鸭子类型--Duck typing 3. 类的约束 5. super深度剖析 1. 封装.多态 封装:将代码.数据放入一个容器空间中,并且可以使用. 多态:一个事物可以呈 ...
- Django之上传图片,分页,三级联动
Django1.8.2中文文档:Django1.8.2中文文档 上传图片 配置上传文件保存目录 1)新建上传文件保存目录. 2)配置上传文件保存目录. 后台管理页面上传图片 1)设计模型类. 2)迁移 ...
- C#数据结构_树
树的定义是递归的,用树来定义树.因此,树(以及二叉 树)的许多算法都使用了递归. 结点(Node):表示树中的数据元素. 结点的度(Degree of Node):结点所拥有的子树的个数. 树的度(D ...
- mysql 实战
建表语句: CREATE TABLE employee ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(150) NOT NULL DEFAULT ...