一些数组排序算法的简单实现(冒泡、插入、希尔、归并和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语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
随机推荐
- API开发之接口安全(二)-----sign校验
上一章 我们说了 sign的生成 那么 我们如何确定这个sign的准确性呢 下来 我们说说 校验sign的那些事 在拿到header里面的内容之后 我们首先需要对其内容的基本参数做一个校验 我们补充下 ...
- Sqlserver 查询分组 记录
select b.* from (select a.*,row_number() over (partition by 列1 order by 列2 desc) rn from a) b ; --如需 ...
- J.U.C并发包(1)
J.U.C并发包(1) AbstractQueuedSynchronizer AbstractQueuedSynchronizer是JUC并发包中锁的底层支持,AbstractQueuedSynchr ...
- BeautifulSoup 库简单学习使用
from bs4 import BeautifulSoup as BS # 首先是初始化一个BeautifulSoup的对象 soup = BS(text,'lxml') 示例: from bs4 i ...
- vue 实现数据绑定原理
案例: Vue 底层原理 // 目的: 使用原生js来实现Vue深入响应式 var box = document.querySelector('.box') var button = ...
- 狄利克雷卷积&莫比乌斯反演证明
狄利克雷卷积简介 卷积这名字听起来挺学究的,今天学了之后发现其实挺朴实hhh. 卷积: "(n)"表示到n的一个范围. 设\(f,g\)是两个数论函数(也就是说,以自然数集为定义域 ...
- Docker跨服务器通信Overlay解决方案(上) Consul单实例
场景 公司微服务快上线了,微服务都是用Docker容器进行部署的,在同一台主机下,把服务都部署上,注册到Nacos的IP与PORT都是内网的IP与Dockerfile中定义的端口号,看起来好像也没什么 ...
- Servlet 获取 数组id进行批量删除
把获取的复选框选中的 id(一般来说都是根据id 进行批量删除的) 从jsp页面 传值到Servlet中 jsp点击事件中: var array=[]; //先声明一个数组变量 var ids=$( ...
- Oracle 优化器_访问数据的方法_单表
Oracle 在选择执行计划的时候,优化器要决定用什么方法去访问存储在数据文件中的数据.我们从数据文件中查询到相关记录,有两种方法可以实现:1.直接访问表记录所在位置.2.访问索引,拿到索引中对应的r ...
- HelloDjango 第 13 篇:分类、归档和标签页
作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 侧边栏已经正确地显示了最新文章列表.归档.分类.标签等信息.现在来完善归档.分类和标签 ...