快速排序和归并排序(C语言)
1.0快速排序算法
(1)分解 (2)递归求解 (3)合并
int partition(int a[],int p,int r)
{
int i=p,j=r+1;
int x=a[p];
int temp;
while(1) //将<x的元素交换到左边元素,>x的元素交换到右边元素
{
while(a[++i]<x && i<r);
while(a[--j]>x);
if(i>=j)
break;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[p]=a[j];
a[j]=x;
return j;
}
void qSort(int a[],int p,int r,int num)
{
int i;
if(p<r)
{
int q=partition(a,p,r);
qSort(a,p,q-1,num); //对左半段排序
qSort(a,q+1,r,num); //对右半段排序
}
printf("快速排序过程:");
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int num;
int i;
int a[100];
printf("请输入数组长度:");
scanf("%d",&num);
printf("请输入数组:\n");
for(i=0;i<num;i++)
{
scanf("%d",&a[i]);
}
qSort(a,0,num-1,num);
printf("快速排序结果:");
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
return 0;
}
2.0归并排序算法
将两个有序的左右子表(以mid区分),合并成一个有序的表
void merge(int a[],int first,int mid,int last)
{
int indexA=first;
int indexB=mid+1;
int tempIndex=0;
int i;
static int temp[1000];
while(indexA<=mid && indexB<=last)//进行左右子表的遍历,如果其中有一个子表遍历完,则跳出循环
{
if(a[indexA]<a[indexB])
{
temp[tempIndex++]=a[indexA++];
}
else
{
temp[tempIndex++]=a[indexB++];
}
}
//有一侧子表遍历完后,跳出循环,将另外一侧子表剩下的数一次放入暂存数组中(有序)
while(indexA<=mid)
{
temp[tempIndex++]=a[indexA++];
}
while(indexB<=last)
{
temp[tempIndex++]=a[indexB++];
}
//将暂存数组中有序的数列写入目标数组的制定位置,使进行归并的数组段有序
tempIndex=0;
for(i=first;i<=last;i++)
{
a[i]=temp[tempIndex++];
}
}
void mergeSort(int a[],int first,int last,int num)
{
int i;
if(first<last)//子表的长度大于1,则进入下面的递归处理
{
int mid=(first+last)/2;
mergeSort(a,first,mid,num);
mergeSort(a,mid+1,first,num);
merge(a,first,mid,last);
}
printf("合并排序时的数组:\n");
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
int num;
int i;
int a[100];
printf("请输入数组长度:");
scanf("%d",&num);
printf("请输入数组:\n");
for(i=0;i<num;i++)
{
scanf("%d",&a[i]);
}
mergeSort(a,0,num-1,num);
printf("合并排序后的数组:\n");
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
return 0;
}
快速排序和归并排序(C语言)的更多相关文章
- Java实现单链表的快速排序和归并排序
本文描述了LeetCode 148题 sort-list 的解法. 题目描述如下: Sort a linked list in O(n log n) time using constant space ...
- 排序算法的C语言实现(上 比较类排序:插入排序、快速排序与归并排序)
总述:排序是指将元素集合按规定的顺序排列.通常有两种排序方法:升序排列和降序排列.例如,如整数集{6,8,9,5}进行升序排列,结果为{5,6,8,9},对其进行降序排列结果为{9,8,6,5}.虽然 ...
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...
- Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析
阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...
- Java快速排序和归并排序详解
快速排序 概述 快速排序算法借鉴的是二叉树前序遍历的思想,最终对数组进行排序. 优点: 对于数据量比较大的数组排序,由于采用的具有二叉树二分的思想,故排序速度比较快 局限 只适用于顺序存储结构的数据排 ...
- 牛B三人组-快速排序-堆排序-归并排序
快速排序 随便取个数,作为标志值,这里就默认为索引位置为0的值 记录左索引和右索引,从右往左找比标志值小的,小值和左索引值交换,右索引变化,然后从左往右找比标志值大的,大值和右索引值交换,左索引变化 ...
- 数据结构之排序技术:快速排序、归并排序、堆排序(C++版)
快速排序 #include <iostream> using namespace std; void swap(int num[], int i, int j) { int temp = ...
- Scala 实现快速排序和归并排序
def quickSort1(array: Array[Int]): Array[Int] = { def swap(x: Int, y: Int): Unit = { val tmp = array ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
随机推荐
- python的正则表达一
一.常用的正则表达式 1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种 ...
- 汇编指令MOVSX与MOVZX
MOVSX 操作数A ,操作数B MOVZX 操作数A ,操作数B 相同点:操作数B 空间必须小于 操作数A 1.格式与MOV基本相同 2.能完成小存储单元向大存储单元的数据传送 比如 movsx e ...
- 【个人训练】(UVa11129)An antiarithmetic permutation
题意与解析 一条非常有趣的二分题.一开始没有懂解法,去网上看了半天全是做法没有这样做为什么是对的(或者说的很含糊).一做完回顾一下立刻有点开朗的感觉. 题意很简单,维护一个0-n-1的数列,使其选出长 ...
- json与python解析
1.json.dumps 将 Python 对象编码成 JSON 字符串 json.loads 将已编码的 JSON 字符串解码为 Python 对象 2.json.dump() ...
- Python网络编程(socketserver、TFTP云盘、HTTPServer服务器模型)
HTTP协议? HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型.HTTP是一个无状态的协议. 通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了 ...
- python 基础篇 10 函数进阶
本节主要内容:1. 函数参数--动态传参2. 名称空间, 局部名称空间, 全局名称空间, 作⽤域, 加载顺序.3. 函数的嵌套4. gloabal, nonlocal关键字 ⼀. 函数参数--动态传参 ...
- CSP201503-1:图像旋转
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- go 语言模拟百度登录
1.参考网上Python的例子自己写了一个go语言的.这个仅供学习技术参考,为了方便有部分参数直接phantomjs执行js获取,代码基本都有注释,测试打印没有删除,还请见谅! 2.本文参考http: ...
- hdu 1556 Color the ball (区间更新 求某点值)
Problem Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a ...
- Faster RCNN代码解析
1.faster_rcnn_end2end训练 1.1训练入口及配置 def train(): cfg.GPU_ID = 0 cfg_file = "../experiments/cfgs/ ...