数据结构与算法-实验5-自动产生随机数,并实现对数的排序
来源:互联网 发布:linux history删除指定 编辑:程序博客网 时间:2024/06/06 01:40
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
using namespace std;
void SimpleRandDemo(int s[],int n); //产生简单的随机数,参数n作为产生随机数个数的限定
void RangedRandDemo(int range_min,int range_max, int n); //产生指定范围的随机数
void Merge(int* pDataArray,int *pTempArray, int bIndex, int mIndex, int eIndex);
void DMerge(int* pDataArray,int *pTempArray, int bIndex, int mIndex, int eIndex);
void UpMergeSort(int* pDataArray,int iDataNum); //升序排序
void DownMergeSort(int* pDataArray,int iDataNum); //降序排序
int main(void)
{
int Test[20];
//时间种子,作为随机数产生的参考
srand((unsigned)time(NULL));
SimpleRandDemo(Test,10);
UpMergeSort(Test, 10);
for (int i = 0; i < 10; i++)
{
cout << Test[i] << " ";
}
printf("\n");
DownMergeSort(Test, 10);
for (int i = 0; i < 10; i++)
{
cout << Test[i] << " ";
}
printf("\n");
//RangedRandDemo(-100, 100, 10);
return 0;
}
//产生简单的随机数
void SimpleRandDemo(int s[],int n)
{
// 打印n个随机数
int i;
for (i = 0; i < n; i++)
s[i] = rand();
}
//产生指定范围的随机数
void RangedRandDemo(int range_min,int range_max,int n)
{
int i;
for (i = 0; i < n; i++)
{
int u = (double)rand() / (RAND_MAX + 1) * (range_max -range_min) //随机数产生函数
+ range_min;
printf(" %6d\n", u);
}
}
/********************************************************
*函数名称:Merge
*参数说明:pDataArray 无序数组;
* int *pTempArray 临时存储合并后的序列
* bIndex 需要合并的序列1的起始位置
* mIndex 需要合并的序列1的结束位置
并且作为序列2的起始位置
* eIndex 需要合并的序列2的结束位置
*说明: 将数组中连续的两个子序列合并为一个有序序列
*********************************************************/
void Merge(int*pDataArray, int *pTempArray, int bIndex, int mIndex, int eIndex)
{
int mLength = eIndex - bIndex; //合并后的序列长度
int i = 0; //记录合并后序列插入数据的偏移
int j = bIndex; //记录子序列1插入数据的偏移
int k = mIndex; //记录子序列2掺入数据的偏移
while (j < mIndex && k < eIndex)
{
if (pDataArray[j] <=pDataArray[k])
{
pTempArray[i++] = pDataArray[j];
j++;
}
else
{
pTempArray[i++] = pDataArray[k];
k++;
}
}
if (j == mIndex) //说明序列1已经插入完毕
while (k < eIndex)
pTempArray[i++] = pDataArray[k++];
else //说明序列2已经插入完毕
while (j < mIndex)
pTempArray[i++] = pDataArray[j++];
for (i = 0; i < mLength; i++) //将合并后序列重新放入pDataArray
pDataArray[bIndex + i] =pTempArray[i];
}
/********************************************************
*函数名称:BottomUpMergeSort
*参数说明:pDataArray 无序数组;
* iDataNum为无序数据个数
*说明: 自底向上的归并排序
*********************************************************/
void UpMergeSort(int*pDataArray, int iDataNum)
{
int *pTempArray = (int *)malloc(sizeof(int) *iDataNum); //临时存放合并后的序列
int length = 1; //初始有序子序列长度为1
while (length < iDataNum)
{
int i = 0;
for (; i + 2 * length < iDataNum; i += 2 * length)
Merge(pDataArray, pTempArray, i, i + length, i + 2 * length);
if (i + length < iDataNum)
Merge(pDataArray, pTempArray, i, i + length,iDataNum);
length *= 2; //有序子序列长度*2
}
free(pTempArray);
}
void DMerge(int*pDataArray, int *pTempArray, int bIndex, int mIndex, int eIndex)
{
int mLength = eIndex - bIndex; //合并后的序列长度
int i = 0; //记录合并后序列插入数据的偏移
int j = bIndex; //记录子序列1插入数据的偏移
int k = mIndex; //记录子序列2掺入数据的偏移
while (j < mIndex && k < eIndex)
{
if (pDataArray[j] >=pDataArray[k])
{
pTempArray[i++] = pDataArray[j];
j++;
}
else
{
pTempArray[i++] = pDataArray[k];
k++;
}
}
if (j == mIndex) //说明序列1已经插入完毕
while (k < eIndex)
pTempArray[i++] = pDataArray[k++];
else //说明序列2已经插入完毕
while (j < mIndex)
pTempArray[i++] = pDataArray[j++];
for (i = 0; i < mLength; i++) //将合并后序列重新放入pDataArray
pDataArray[bIndex + i] =pTempArray[i];
}
void DownMergeSort(int*pDataArray, int iDataNum) //降序排序
{
int *pTempArray = (int *)malloc(sizeof(int) *iDataNum); //临时存放合并后的序列
int length = 1; //初始有序子序列长度为1
while (length < iDataNum)
{
int i = 0;
for (; i + 2 * length < iDataNum; i += 2 * length)
DMerge(pDataArray, pTempArray, i, i + length, i + 2 * length);
if (i + length < iDataNum)
DMerge(pDataArray, pTempArray, i, i + length,iDataNum);
length *= 2; //有序子序列长度*2
}
free(pTempArray);
}
- 数据结构与算法-实验5-自动产生随机数,并实现对数的排序
- 数据结构实验--------主要排序算法的实现
- 随机化算法(随机数产生并模拟抛硬币实验)
- 数字信号产生之对数正态分布的随机数
- 数据结构实验4(排序算法的实现及性能分析)
- 随机数的产生原理与实现
- 数据结构与算法实验题 5.2 排序
- 根据对数正态分布产生随机数
- [ --> C Language<-- ] 产生随机数矩阵并排序
- 产生N个随机数并排序
- c语言产生随机数并排序
- 【数据结构与算法】【排序】冒泡排序的代码实现
- 【数据结构与算法】【排序】简单选择排序的代码实现
- 【数据结构与算法】【排序】直接插入排序的代码实现
- 【数据结构与算法】【排序】希尔排序的代码实现
- 【数据结构与算法】【排序】堆排序的代码实现
- 【数据结构与算法】【排序】归并排序的代码实现
- 【数据结构与算法】【排序】快速排序的代码实现
- 获得微秒数 3
- 剑指Offer——知识点储备-故障检测、性能调优与Java类加载机制
- 电商类app源码解析(持续更新)
- CPU vs Clock Time
- java中关于时间的用法示例
- 数据结构与算法-实验5-自动产生随机数,并实现对数的排序
- windows安装mycat
- 扇形百分比控件
- 通过 de Casteljau 算法绘制贝塞尔曲线,并计算它的切线,实现 1-7 阶贝塞尔曲线的形成动画。
- BeanCopier 浅复制工具类
- http与https区别
- Android 项目基础架构。包含架构分层、基本工具层等
- 图解Github的入门教程
- Java中的单例模式