快速排序

 #include <iostream>
using namespace std; void swap(int num[], int i, int j)
{
int temp = num[i];
num[i] = num[j];
num[j] = temp;
} int partition(int num[], int left, int right)
{
int key = left;
int value = num[key];
while (left < right)
{
while (left < right && num[right] >= value)right--;
while (left < right && num[left] <= value)left++;
swap(num, right, left);
}
swap(num, key, left);
return left;
} void QuickSort(int num[], int begin, int end)
{
if (begin < end)
{
int middle = partition(num, begin, end);
QuickSort(num, begin, middle - );
QuickSort(num, middle + , end);
}
} int main()
{
int num[];
int n = ;
while (cin >> n)
{
for (int i = ; i < n; i++)
{
int temp = ;
cin >> temp;
num[i] = temp;
}
QuickSort(num, , n - );
for (int i = ; i < n; i++)
cout << num[i] << " ";
cout << endl;
}
return ;
}

归并排序

#include <iostream>
using namespace std; void Merge(int *from, int *to, int begin, int middle, int end)
{
int i = begin;
int j = middle + ;
int k = i;
while (i <= middle && j <= end)
{
if (from[i] < from[j])
to[k++] = from[i++];
else to[k++] = from[j++];
}
while (i <= middle) to[k++] = from[i++];
while (j <= end) to[k++] = from[j++];
} void MergePass(int *from, int *to, int end, int h)
{
int i = ;
while (i <= end - * h + )
{
Merge(from, to, i, i + h - , i + * h - );
i += * h;
}
if (i < end - h + )
Merge(from, to, i, i + h - , end);
else
for (int k = i; k <= end; k++)
{
to[k] = from[k];
}
} void MergeSort(int *from, int *to, int begin, int end)
{
int h = ;
while (h <= end)
{
MergePass(from, to, end, h);
h = * h;
MergePass(to, from, end, h);
h = * h;
}
} int main() {
int num[];
int num2[];
int n = ;
while (cin >> n)
{
for (int i = ; i < n; i++)
{
int temp = ;
cin >> temp;
num[i] = temp;
}
MergeSort(num, num2, , n - );
for (int i = ; i < n; i++)
cout << num[i] << " ";
cout << endl;
}
return ;
}

堆排序

 #include <stdio.h>

 void HeapAdjust(int *num, int s, int length)
{
int temp = num[s];
int child = * s + ;
while (child < length)
{
if (child + < length && num[child] < num[child + ])
child++;
if (num[s] < num[child])
{
num[s] = num[child];
num[child] = temp;
s = child;
child = * s + ;
}
else
break;
}
} void buildingHeap(int *num, int length)
{
for (int i = (length - ) / ; i >= ; --i)
HeapAdjust(num, i, length);
} void HeapSort(int *num, int length)
{
buildingHeap(num, length);
for (int i = length - ; i > ; --i)
{
int temp = num[];
num[] = num[i];
num[i] = temp;
HeapAdjust(num, , i);
}
} void print(int num[], int n) {
for (int i = ; i < n; i++) {
printf("%d ", num[i]);
}
printf("\n");
} int main()
{
int num[];
int n = ;
while (scanf("%d", &n) != EOF)
{
for (int i = ; i < n; i++)
scanf("%d", &num[i]);
HeapSort(num, n);
print(num, n);
}
return ;
}

转自:http://www.cnblogs.com/renjiashuo/p/7412583.html

数据结构之排序技术:快速排序、归并排序、堆排序(C++版)的更多相关文章

  1. 【Java】 大话数据结构(16) 排序算法(3) (堆排序)

    本文根据<大话数据结构>一书,实现了Java版的堆排序. 更多:数据结构与算法合集 基本概念 堆排序种的堆指的是数据结构中的堆,而不是内存模型中的堆. 堆:可以看成一棵完全二叉树,每个结点 ...

  2. HDU-1425-sort(计数排序以及快速排序和堆排序的变种)

    计数排序 Accepted 1425 483MS 5276K 997 B G++ #include "bits/stdc++.h" using namespace std; typ ...

  3. c语言 快速排序---归并排序----堆排序

    //快速排序: #include <stdio.h> #define MAX 500000 int s[MAX]; void Q_Sort(int start,int end) { int ...

  4. Java数据结构与排序算法——堆和堆排序

    //================================================= // File Name : Heap_demo //--------------------- ...

  5. 算法 排序NB二人组 堆排序 归并排序

    参考博客:基于python的七种经典排序算法     常用排序算法总结(一) 序前传 - 树与二叉树 树是一种很常见的非线性的数据结构,称为树形结构,简称树.所谓数据结构就是一组数据的集合连同它们的储 ...

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

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

  7. Python实现八大排序(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)

    目录 八大排序 基数排序 归并排序 堆排序 简单选择排序 直接插入排序 希尔排序 快速排序 冒泡排序 时间测试 八大排序 大概了解了一下八大排序,发现排序方法的难易程度相差很多,相应的,他们计算同一列 ...

  8. 数据结构和算法(Golang实现)(25)排序算法-快速排序

    快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...

  9. 数据结构和算法(Golang实现)(24)排序算法-优先队列及堆排序

    优先队列及堆排序 堆排序(Heap Sort)由威尔士-加拿大计算机科学家J. W. J. Williams在1964年发明,它利用了二叉堆(A binary heap)的性质实现了排序,并证明了二叉 ...

随机推荐

  1. vue中$nextTick的用法

    简介 vue是非常流行的框架,他结合了angular和react的优点,从而形成了一个轻量级的易上手的具有双向数据绑定特性的mvvm框架.本人比较喜欢用之.在我们用vue时,我们经常用到一个方法是th ...

  2. Ubuntu 18.04上搭建FTP服务器

    1.准备工作需要安装并运行的Ubuntu Server 18.04系统.当然还需要一个具有sudo权限的账号. 2.安装VSFTPVSFTP程序位于标准存储库中,因此可以使用单个命令删除安装.打开终端 ...

  3. DBA 需要掌握的知识框架及工作内容

    知识框架 1.  数据库的工作原理以及体系结构 2.  数据库管理(管理数据库和数据库对象) 3.  数据库备份和恢复 4.  数据库故障处理 5.  数据库补丁安装及升级 6.  数据库性能 工作内 ...

  4. Django去操作已经存在的数据库

    你有没有遇到过这种情况? 数据库,各种表结构已经创建好了,甚至连数据都有了,此时,我要用Django管理这个数据库,ORM映射怎么办??? Django是最适合所谓的green-field开发,即从头 ...

  5. c++ 网络编程(六)LINUX下 socket编程 多播与广播 实现一次发送所有组客户端都能接收到

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9614288.html 一.多播 锲子:有这么一种情况,网络电台可能需要同时向成千上万的用户传输 ...

  6. jsoup、xpath教程

    一.jsoup 1.使用JSOUP处理HTML文档 2.使用 jsoup 对 HTML 文档进行解析和操作 3.jsoup开发指南,jsoup中文使用手册,jsoup中文文档 二.xpath 1.XP ...

  7. Error opening zip file or JAR manifest missing的解决方法

    错误描述: MyEclipse中启动Tomcat(debug)的时候就出现Error starting Tomcat : A configuration error occured during st ...

  8. 聚焦小游戏技术生态,腾讯游戏云GAME-TECH落地厦门

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 2018迎来了小游戏元年,据<2018年小游戏行业白皮书>显示:2018年小游戏市场规模预 ...

  9. ASP.NET能知道的东西

    ASP.NET能知道的东西 获取服务器电脑名: Page.Server.ManchineName 获取用户信息: Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  10. Centos7 部署.netCore2.0项目

    最近在学习.netCore2.0,学习了在Centos上部署.netCore的方法,中间遇到过坑,特意贴出来供大家分享,在此我只是简单的在CentOS上运行.NETCore网站,没有运用到nginx等 ...