算法分析与设计实验一
实验内容
分别针对随机生成的三组整数序列(规模为1000个数、10000个数、100000个数)进行排序,排序算法使用以下五种经典的方法,分别是:冒泡排序算法,选择排序算法,插入排序算法,归并排序算法和快速排序算法。
实验目的
• 回顾并熟悉常用的排序算法。
• 通过实验体会算法设计对问题求解效率所产生的深刻影响。
算法设计的基本思路
选择排序
在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环 到倒数第二个数和最后一个数比较为止。
直接插入排序
在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
冒泡排序
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
归并排序算法
合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法。它的基本思想就是假设数组A有N个元素,那么可以看成数组A是又N个有序的子序列组成,每个子序列的长度为1,然后再两两合并,得到了一个 N/2 个长度为2或1的有序子序列,再两两合并,如此重复,直到得到一个长度为N的有序数据序列为止,这种排序方法称为2—路合并排序。
快速排序
快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧) 的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。
程序清单
#include<stdlib.h>
#include<stdio.h>
#include<ctime>
#include<iostream>
using namespace std;
void Swap(int &X,int &Y) //两个数交换
{int temp;
temp=X;
X=Y;
Y=temp;
}
/**************************************起泡排序法****************************/
void BubbleSort(int R[],int Length)
{
int i,j,t;
i=Length-1;