汉扬编程 编程大纲 如何用C语言编一个归并排序的程序

如何用C语言编一个归并排序的程序

  #include \”MergeSort。h\”
#include
using namespace std;
MergeSort::MergeSort(vector _list, int _len)
{
list。
  push_back(0);
link。push_back(0);
for (int i=0; ilen = _len;
}
//9 归并排序:递归———————————————————–
//具体方法:以merger_link[]提供链表功能。
  merger_link[i]对应在有序子序列中
//merger_list[i]后一个结点在原merger_list[]中的下标;
//merger_link[0]总是表示有序子序列开始的结点在merge_list[]中的下标;
//st1,st2为两个有序序列的第一个结点;
//将他们归并,并返回其第一个结点的下标,即merger_link[0]
int MergeSort::list_merge(int st1, int st2)
{
int k = 0, i = st1, j = st2;
while (i && j) //当两序列未检测完
if (list[i] =right) return left;
int middle = (left right)/2;
//对左右两子序列进行归并
return list_merge(merge_sort(left,middle), merge_sort(middle 1,right));
}
void MergeSort::out()
{
int i = link[0];
int j = 0;
while (i)
{
j ;
cout i = link[i];
if (j == 0) cout }
cout }。
  

数据结构C语言–三种以上的排序算法

  快速排序:
void QSort(int a[], int l, int r) //单关键字交换快排
{
int i = l, j = r, mid = (i j) / 2; //二[i,j]区间
while (i a[mid]) //找元素a[j]比a[mid]
j–;
if (i > n;
for (int i = 1; i > a[i]。
  data;
a[i]。p = a[i]。l = a[i]。r = -1;
}
}

void Insert(BinaryTree a[], int i) //二叉查找树插入编号 i 节点
{
int parent = -1, x = a[1]。
  p; //parent 始终指向 x 父节点编号
while (x != -1) //向搜索直找层
{
parent = x;
if (a[i]。data -1) //递归遍历左
Sort(a, a[i]。
  l);
cout -1) //递归遍历右
Sort(a, a[i]。
  r);
}
堆排序:
void Heap(int a[], int n, int p) //维护()堆维护P根堆
{
int l = p * 2, r = l 1, t = p; //左编号2P右2P 1初始化根节点P
if ((l a[p])) //找数维护堆(改 a[t])) //找数维护堆(改= 1; i–) //n / 2始必根节点依调用Heap建立堆
Heap(a, n, i);
for (i = n; i >= 2; i–) //每堆顶前堆节点(i)交换[1, i – 1]重新堆化
{
Swap(a[i], a[1]);
Heap(a, i – 1, 1);
}
}
插入排序:
void InsertionSort(int a[], int l, int r) //区间[l, r]执行插入排序
{
int i, j, t;
for (i = l 1; i = l) && (a[j] > t)) //移操作并找确位置
{
a[j 1] = a[j];
j–;
}
a[j 1] = t;
}
}
所Swap函数意思都交换两变量。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6460.html

在哪里做D转C武器的任务啊`~

炒股新手入门教程有哪些呢?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部