//快速排序:

#include <stdio.h>
#define MAX 500000
int s[MAX];
void Q_Sort(int start,int end)
{
int i,j,t;
if ( start >= end ) return ;
t = s[start];
i = start;
j = end;
while ( i < j)
{
while ( s[j] >= t && i < j)
{
j--;
}
s[i] = s[j];
while ( s[i] <= t && i < j)
{
i++;
}
s[j] = s[i];
}
s[i] = t;
Q_Sort(start,i-1);
Q_Sort(i+1,end);
}
int main()
{
int i,n;
while (scanf("%d",&n),n)
{
for ( i = 0 ; i < n ; i++)
{
scanf("%d",&s[i]);
}
Q_Sort(0,n-1);
}
return 0;
}

  


//归并排序

#include <stdio.h>
#define MAX 500000
int a[MAX];
int b[MAX];
void Merge(int left,int mid,int right)
{
int i,j,k;
i = left;
j = mid+1;
k = left;
while ( i <= mid && j <= right )
{
if ( a[i] <= a[j] )
{
b[k++] = a[i++];
}
else
{
b[k++] = a[j++];
}
}
while ( i <= mid )
{
b[k++] = a[i++];
}
while ( j <= right )
{
b[k++] = a[j++];
}
}
void MergeSort(int left,int right)
{
int i,mid;
if ( left < right )
{
mid = ( left + right ) / 2 ;
MergeSort(left , mid);
MergeSort(mid+1 , right);
Merge(left,mid,right);
for ( i = left ; i <= right ; i++)
{
a[i] = b[i];
}
}
}
int main()
{
int i,n;
while (scanf("%d",&n),n)
{
for ( i = 0 ; i < n ; i++)
{
scanf("%d",&a[i]);
}
MergeSort(0,n-1);
}
return 0;
}         

  


//堆排:

#include <stdio.h>
#define MAX 500000
int s[MAX];
void Heapify(int x,int n)
{
if ( x*2+1 <= n)
{
if ( s[x] == s[2*x] && s[x] == s[2*x+1] ) return ;
if ( s[2*x] > s[x] && s[2*x] > s[2*x+1] )
{
s[2*x] ^= s[x] ^= s[2*x] ^= s[x] ;
Heapify(2*x,n);
}
else if ( s[2*x+1] > s[x] && s[2*x+1] > s[2*x] )
{
s[2*x+1] ^= s[x] ^= s[2*x+1] ^= s[x] ;
Heapify(2*x+1,n);
}
else if ( s[2*x+1] == s[2*x] && s[2*x] > s[x])
{
s[2*x] ^= s[x] ^= s[2*x] ^= s[x];
Heapify(2*x,n);
}
}
else if ( x*2 == n )
{
if ( s[2*x] > s[x] )
{
s[2*x] ^= s[x] ^= s[2*x] ^= s[x] ;
Heapify(2*x,n);
}
}
}
void HeapSort(int n)
{
int i,k;
for ( i = n/2 ; i >= 1 ; i--)
{
Heapify(i,n);
}
for ( k = n ; k > 1 ; k--)
{
s[k] ^= s[1] ^= s[k] ^= s[1];
Heapify(1,k-1);
}
}
int main()
{
int i,n;
while (scanf("%d",&n),n)
{
for ( i = 1 ; i <= n ; i++)
{
scanf("%d",&s[i]);
}
HeapSort(n);
for ( i = 1 ; i <= n ; i++)
{
if ( i != n ) printf("%d ",s[i]);
else printf("%d\n",s[i]);
}
}
return 0;
}

  


 
 

c语言 快速排序---归并排序----堆排序的更多相关文章

  1. 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)

    2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...

  2. 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序

    最近在准备笔试题和面试题,把学到的东西整理出来,一来是给自己留个笔记,二来是帮助大家学习. 题目: 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例:  输入:[1,2,3,5,2, ...

  3. <算法基础><排序>三种高级排序——快速排序,堆排序,归并排序

    这三种排序算法的性能比较如下: 排序名称 时间复杂度(平均) 时间复杂度(最坏) 辅助空间 稳定性 快速排序 O(nlogn) O(n*n) O(nlogn) 不稳定 堆排序 O(nlogn) O(n ...

  4. 使用python实现归并排序、快速排序、堆排序

    归并排序 使用分治法:分而治之 分: 递归地拆分数组,直到它被分成两对单个元素数组为止. 然后,将这些单个元素中的每一个与它的对合并,然后将这些对与它们的对等合并,直到整个列表按照排序顺序合并为止. ...

  5. 9, java数据结构和算法: 直接插入排序, 希尔排序, 简单选择排序, 堆排序, 冒泡排序,快速排序, 归并排序, 基数排序的分析和代码实现

    内部排序: 就是使用内存空间来排序 外部排序: 就是数据量很大,需要借助外部存储(文件)来排序. 直接上代码: package com.lvcai; public class Sort { publi ...

  6. C语言快速排序

    复习快速排序,用C语言实现: #include <stdio.h> int quicksort(int begin, int end, int a[], int len); void ma ...

  7. David MacKay:用信息论解释 '快速排序'、'堆排序' 本质与差异

    这篇文章是David MacKay利用信息论,来对快排.堆排的本质差异导致的性能差异进行的比较. 信息论是非常强大的,它并不只是一个用来分析理论最优决策的工具. 从信息论的角度来分析算法效率是一件很有 ...

  8. Luogu 1177 - 【模板】快速排序 - [快速排序][归并排序][无旋Treap]

    题目链接:https://www.luogu.org/problemnew/show/P1177 题意:输入 $n$ 以及后续 $n$ 个整数,让你将这 $n$ 个整数从小到大排序输出. 归并排序(用 ...

  9. noi.ac #32 快速排序归并排序应用

    \(des\) 给定长度为 \(n\) 的数组,要求翻转一段区间 \([l, r]\) 使其升序排列. 要求 \(\sum r - l + 1 <= 2e7\) \(sol\) 考虑快速排序,每 ...

随机推荐

  1. SQL Server 中WITH (NOLOCK)

    with(nolock)的功能: 1: 指定允许脏读.不发布共享锁来阻止其他事务修改当前事务读取的数据,其他事务设置的排他锁不会阻碍当前事务读取锁定数据.允许脏读可能产生较多的并发操作,但其代价是读取 ...

  2. linux 的一个防火墙策略

    #警告:在运行脚本后,勿必单独运行 iptables -F#因为脚本包含的默认规则为“禁止所有访问”#当其它规则被清除后,系统表现为无法访问状态,需要重启系统恢复#iptables -L 查看当前已应 ...

  3. ubuntu 14.04安装quickbuild server (一)

    官网: http://www.pmease.com/ 指导网站: http://wiki.pmease.com/display/QB60/ 1.  安装quickbuild server ------ ...

  4. python包管理器pip

    步骤一:下载pip包 https://pypi.python.org/pypi/pip 步骤二:安装pip包 解压后,到pip包目录执行: python setup.py install 步骤三:添加 ...

  5. prepare—Article【准备篇】之SSH_tool#PuTTY

    第一:下载PuTTY: url :     http://www.openssh.com/ 下载界面: 安装后: 详解以上命令 ① ② PuTTYgen is a key generator. It ...

  6. 用Django搭建个人博客—(1)

    业精于勤荒于嬉,形成于思毁于随. 本阶段的任务小记: 简单介绍一下Django的使用,创建项目和一个app 简单介绍一下Django的settings.py文件的相关配置 整合数据库到自己的博客系统中 ...

  7. virtalBox共享文件夹设置

    sudo mount -t vboxsf gongxiang /mnt/shared/

  8. Java-反射再学习

    反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是“反”指的是通过对象找到类. packa ...

  9. 上传XML文件字符编码问题

    1.上传的XML文件的空格的字符编码和倒入到数据库的空格的字符编码不是一种编码格式,导致导入到数据库的数据和XML文件的数据不一致的情况,进而使展示到界面上的数据在进行搜索时不能搜索出来.解决办法: ...

  10. jQuery中的data方法:

    向元素附加数据,然后取回该数据: $("#btn1").click(function(){ $("div").data("greeting" ...