一、 实验目的
1. 掌握各种常用排序的算法思想;
2. 掌握各种常用排序的算法实现;
3. 掌握各种常用排序时间复杂度,比较各种排序的优缺点。
二.排序算法的归类:
总的排序算法分为以下几类:1.插入类排序:如:直接插入排序,折半插入排序,希尔排序
2.交换类排序:如:冒泡排序,快速排序,其中冒泡排序应该是计算机专业的学生最为熟悉的一种排序算法了,而快速排序则是在冒泡排序的基础上一次消除多个逆序对改进而来3.选择类排序:如:简单选择排序,堆排序。
4.其它类排序:如:归并排序,基数排序等。
三、 实验内容与要求
1. 编程实现各种排序算法,并对比各种算法的效率。
【设计要求】在给出的代码素材sort.cpp文件中补充main函数中的swtich语句,以及以下排序函数,并比较各种排序方法在对素材文件中的1.data~5.data待排序序列进行排序时所需要的时间。
void shellsort(int data[],int n);//希尔排序
void bubllesort(int data[],int n);//冒泡排序
void quicksort(int data[],int n);//快速排序
void selectsort(int data[],int n);//简单选择排序
void heapsort(int data[],int n);//堆排序
void mergesort(int data[],int n);//合并排序
void radixsort(int data[],int n) ;//基数排序
2.【程序代码】完成createdata函数及排序函数,其中createdata可参考下图,其中往目标文件中写入两部分内容,随机数的总个数及产生各个随机数。
方法一:C++版
1. sort.h
#include<iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;
const int LineLenght=20;//控制屏幕打印时,每行元素个数
class sort
{
private:
int *data,n;
public:
void Printdata();
void Getdata(string file);
void creatdata(int num);
void Outputdata();
void insertsort();//直接插入排序
void shellsort();//希尔排序
void bubllesort();//冒泡排序
void quicksort(int low, int high);//快速排序
void selectsort();//简单选择排序
void heapsort();//堆排序
void sift(int start,int endnode);
void mergesort();//合并排序
void merge(int low, int high,int temp[]);
void radixsort();//基数排序
};
2. sort.cpp
#include<iostream>
#include<fstream>
#include<stdlib.h>
#include"sort.h"
using namespace std;
//======打印=============================================================
void sort::Printdata( )
{
for(int i=1;i<=n;i++)
{
cout<<data[i]<<" ";
if(i%LineLenght==LineLenght-1)
cout<<endl;
}
cout<<endl;
}