#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)的更多相关文章

  1. java实现的排序(插入/希尔/归并)

    java实现三种简单的排序,以下是代码: /*插入排序*/ public static void insertionSort(int[] a) { int j; for(int p = 1; p &l ...

  2. [java初探06]__排序算法的简单认识

    今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...

  3. 左神算法第一节课:复杂度、排序(冒泡、选择、插入、归并)、小和问题和逆序对问题、对数器和递归(Master公式)

    第一节课 复杂度 排序(冒泡.选择.插入.归并) 小和问题和逆序对问题 对数器 递归 1.  复杂度 认识时间复杂度常数时间的操作:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,叫做常数 ...

  4. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  5. 使用C语言实现二维,三维绘图算法(3)-简单的二维分形

    使用C语言实现二维,三维绘图算法(3)-简单的二维分形 ---- 引言---- 每次使用OpenGL或DirectX写三维程序的时候, 都有一种隔靴搔痒的感觉, 对于内部的三维算法的实现不甚了解. 其 ...

  6. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  7. 1101: 零起点学算法08——简单的输入和计算(a+b)

    1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitt ...

  8. java程序员到底该不该了解一点算法(一个简单的递归计算斐波那契数列的案例说明算法对程序的重要性)

    为什么说 “算法是程序的灵魂这句话一点也不为过”,递归计算斐波那契数列的第50项是多少? 方案一:只是单纯的使用递归,递归的那个方法被执行了250多亿次,耗时1分钟还要多. 方案二:用一个map去存储 ...

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

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

随机推荐

  1. ASP.NET Core 框架本质学习

    本文作为学习过程中的一个记录. 学习文章地址: https://www.cnblogs.com/artech/p/inside-asp-net-core-framework.html 一. ASP.N ...

  2. 安装VMware14虚拟机,centos7版本的linux 软件地址

    首先下载虚拟机软件和centos7的linux系统的镜像软件系统, https://pan.baidu.com/s/1cJfzpaLwB4dfe2W8gGEAPQ 两个文件 非常好用 虚拟机安装 很简 ...

  3. PKI机制总结

    PKI,全称是Public Key Infrastructure,可译为公钥基础设施.它是因特网中节点通信的安全保障机制,HTTPS中的‘S’就来源于PKI. 要去学习一个技术,首先要从它的源头考虑— ...

  4. java后端_百度二面

    参考: https://www.nowcoder.com/discuss/215891?type=2&order=0&pos=10&page=1 1. gc 2. java l ...

  5. c# 将dwg文件转化为pdf

    https://blog.csdn.net/mywaster/article/details/50220379 最近做一个项目,要求将dwg文件转化为pdf,开发工具VS2010 + AutoCad ...

  6. AutoCAD二次开发(.Net)之创建图层Layer

    //https://blog.csdn.net/qq_21489689?t=1[CommandMethod("CREATELY")] public void CreateLayer ...

  7. linux 7忘记密码找回

    一.linux 7忘记密码二种更改方法 centos7/rhel7进入单用户方式和重置密码方式发生了较大变化,GRUB由b引导变成了ctrl+x引导.重置密码主要有rd.break和init两种方法. ...

  8. CentOS -- RocketMQ HA & Monitoring

    RocketMQ Architecture NameServer Cluster Name Servers provide lightweight service discovery and rout ...

  9. String类的intern()方法,随常量池发生的变化

    JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了. intern的作用 简 ...

  10. 剑指Offer(二十八):数组中出现次数超过一半的数字

    剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...