noj大作业c语言扫雷,noj大作业简介.doc

作业名称:算法演示程序学 院:航海学院班 级:学 号:2013300951姓 名:苏和团队组成:

西北工业大学

2015年11月11日

1、问题与背景(描述程序所要解决的问题或应用背景)

C语言经过几十年的发展已经发展出多种多样的的排序方法,网上的解释和 代码良莠不齐,许多具有严重的错误,给学习者打来极大的不便。

因此我将目前比较流行的1.冒泡排序

4.快速排序 5堆排序 6归并排序

7.基数排序

加以总结标明注释成为这个演示程序以供交流学习使用

2、开发工具(列出所使用的开发工具和第3方开发库)

Code::block

3、主要功能(详细说明程序的功能)

基本功能:本程序可实现对100个及以下的数据排列的功能。

拓展功能:1.选择不同的排序法进行排序。

2.选择数据正序排列,还是逆序排列。

4、设计内容(详细描述解决问题的原理和方法、算法、数据结构等)

本程序的数据变换主要在数组中进行。

冒泡排序

相邻两个记录之间进行比较和互换使较小的记录逐渐从底部移向顶部

选择排序

第i趟选择排序通过n-i次关键码的比较从

插入排序

快速排序

堆排序

先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区。

再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n]。由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],同样要将R[1..n-2]调整为堆,直到无序区只有一个元素为止。

归并排序

将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

首先申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复直到某一指针超出序列尾将另一序列剩下的所有元素直接复制到合并序列尾

基数排序基数排序法又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用

对数据来说,首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中接下来将这些桶子中的数值重新串接起来接着再进行一次分配,这次是根据十位数来分配接下来将这些桶子中的数值重新串接起来这时候整个数列已经排序完毕

5、程序文件与工程名称(标出程序中所有文件名、工程名称及其说明)

工程的名称:排序算法演示程序

包含的程序原文件如下:

1.sort.cpp

主函数、输入和输出数据、显示菜单、选择排序方法

2. sort_fun.cpp

实现7种排序的函数

myh.h

7种排序函数及其附属函数的声明

void Bubble(int a[],int n); 冒泡排序

void Selection(int a[],int n); 选择排序

void Insertion(int a[],int n); 插入排序

void Quick(int a[],int n,int left,int right); 快速排序

void Shift(int a[] , int i , int m); 建堆

void Heap(int a[] , int n); 堆排序

void MergeSort(int R[],int low,int high); 归并排序

void Merge(int *R,int low,int m,int high); 元素比较

基数排序

int getLoopTimes(int num); 获取数字的位数

int findMaxNum( int *p , int n); 查询数组中的最大数

void sort2(in

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值