资源简介
排序算法基础、改进综合:
//冒泡排序
//定向冒泡[鸡尾酒]排序
//选择排序
//改进的选择排序
//直接插入排序
//二分插入排序
//希尔排序
//自顶向下地归并排序
//自底向上地归并排序
//堆排序
//快速排序
//改进的快速排序:三向切分快速排序
代码片段和文件信息
#include“SeqHeap.h“
template
SeqHeap::SeqHeap()
{
size = 0;
}
template
SeqHeap::SeqHeap(DataType arr[] int n)
{
for (int i = 0; i < n; i++) {
heap[i+1]=arr[i];
}
size = n;
}
template
SeqHeap::~SeqHeap()
{
}
template
void SeqHeap::MakeMaxSeqHeap(SeqHeap *h)
{
h->MaxHeapSort(h);//构建最大顶堆
}
template
void SeqHeap::MakeMinSeqHeap(SeqHeap *h)
{
h->MinHeapSort(h);//构建最小顶堆
}
template
void SeqHeap::PrintSeqHeap(SeqHeap h)
{
for (int i = 1; i <= size; i++) {
cout << h.heap[i] << “ “;
if (i%20 == 0)
cout << endl;
}
cout << endl;
}
template
void SeqHeap::MaxHeapSort(SeqHeap * h)
{
int N = h->size;
for (int k = N / 2; k >= 1; k--) {
SinkConversely(h->heap k N);//此步是堆的构造:构造的结果是部分堆有序,即头结点的值是最小的。
}
while (N > 1)
{
Swap(h->heap 1 N--);
SinkConversely(h->heap 1 N);
}
}
template
void SeqHeap::MinHeapSort(SeqHeap *h)
{
int N = h->size;
for (int k = N / 2; k >= 1; k--) {
Sink(h->heap k N);//此步是堆的构造:构造的结果是部分堆有序,即头结点的值是最大的。
}
while (N > 1)
{
Swap(h->heap 1 N--);
Sink(h->heap 1 N);
}
}
/*
arr[]:即 h->heap
k:把位置为k的结点下沉
【该结点的特点:heap[k] < heap[2*k] (OR||AND) heap[k] N:堆里(即heap[])有N个元素,即 h->size的值
*/
template
void SeqHeap::Sink(DataType arr[] int k int N)
{
while (2*k <= N) //当结点k 的子结点2*k 不超过当前数组元素的最大下标时【结点 2*k 是 结点 k 的子结点】,才有机会继续下沉
{
int j = 2 * k;
if (j < N && Less(arr[j] arr[j + 1]))
j++;
if (Less(arr[j] arr[k])) break;//also could be !Less(arr[k] arr[j])即当 arr[k]>arr[j]时跳出循环体
Swap(arr k j);
k = j;
}
}
/*
arr[]:即 h->heap
k:把位置为k的结点上浮【该结点的特点:heap[k] > heap[k/2],即该结点值比其父结点值大 】
N:堆里(即heap[])有N个元素,即 h->size的值
*/
template
void SeqHeap::Swin(DataType arr[] int k int N)
{
while ( k>1 && Less(arr[k/2]arr[k]) )//若结点 k 不是根结点、且其值比其父结点大时,循环体进行,结点k上浮
{
Swap(arr k / 2 k);
k = k / 2;
}
}
template
void SeqHeap::SinkConversely(DataType arr[] int k int N)
{
while (2 * k <= N) //当结点k 的子结点2*k 不超过当前数组元素的最大下标时【结点 2*k 是 结点 k 的子结点】,才有机会继续下沉
{
int j = 2 * k;
if (j < N && Less(arr[j + 1] arr[j]))
j++;
if (Less(arr[k] arr[j])) break;//also could be !Less(arr[k] arr[j])即当 arr[k] Swap(arr k j);
k = j;
}
}
template
void SeqHeap::SwinConversely(DataType arr[] int k int N)
{
while (k>1 && Less(arr[k / 2] arr[k]))//若结点 k 不是根结点、且其值比其父结点小时,循环体进行,结点k上浮
{
Swap(arr k / 2 k);
k = k / 2;
}
}
template
void SeqHeap::Swap(DataType arr[] int i int j)
{
DataType temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
template
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9491 2019-03-08 00:30 SortAlgorithm.h
文件 3744 2019-03-08 00:30 SeqHeap.cpp
文件 10463 2019-03-06 17:06 SortAlgorithm.cpp
文件 17303 2019-03-08 00:31 SortAlgorithmTest.cpp
文件 2018 2019-03-08 00:30 SeqHeap.h
----------- --------- ---------- ----- ----
43019 5
相关资源
- citesort.sty
- 距离矢量算法Distance Vector Algorithm的动
- 八数码 算法流程图.vsdx
- Two Dimensional Phase Unwrapping Theory Algori
- 类电磁机制算法源码(EM Algorithm)
- Iterated Soft-Thresholding Algorithm(谷鹄翔
- Computer Graphics and Geometric Modeling: Impl
- cuda编程 merge sort
- message passing algorithmMessage Passing Algor
- 贪婪算法的
- ConvexOptimizationAlgorithms(2015年DimitriP
- algorithm design 的课后答案
- The Whale Optimization Algorithm.
- latex Algorithms伪代码规范
- 最优服务次序问题C代码
- The GraphSLAM algorithm
- algorithm 头文件 说明
- CS_recovery_algorithms_OMP_SP_IHT.zip
- Introduction to Genetic Algorithms.1998.pdf
- Bandit Algorithms for Website Optimization.pdf
- Machine Learning. Algorithms and Applications-
- Hands-On Data Structures and Algorithms with R
- 算法导论 Introduction to Algorithms CLRS 英
- Stochastic Recursive Algorithms for Optimizati
- Practical Optimization:Algorithms and Engine
- successful algorithmic trading 中文版
- High Bandwidth Sensorless Algorithm for AC Mac
- Distributed.Systems.An.Algorithmic.Approach.2n
- Introduction to Distributed Algorithms
- Algorithms Unlocked(Thomas H. cormen)
评论
共有 条评论