数据结构课程实习——选择、堆、快速、归并排序算法

各种排序算法的综合

#include<iostream>
using namespace std;
typedef int Status;
#define LIST_INIT_SIZE 1
#define LT(a,b)((a)<(b))
#define OK 1
#define OVERFLOW -2
typedef struct{
int *elem;
int length;
int listsize;
}sqlist;
Status InitList_sq(sqlist &L)//建立新表
{L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
void InputSort(sqlist &L){
int i,n;
cout<<"请输入表元素的个数:";cin>>n;
L.length=n;
cout<<"请输入表内个元素:"<<endl;
for(i=1;i<=L.length;i++)
cin>>L.elem[i];}
void OutputSort(sqlist&L){
int i;
for(i=1;i<=L.length;i++)
cout<<L.elem[i]<<"\t";
cout<<endl;
}
void InsertSort(sqlist &L){
int i,j;
InitList_sq(L);
InputSort(L);
for(i=2;i<=L.length;++i){
if(LT(L.elem[i],L.elem[i-1])){
L.elem[0]=L.elem[i];
L.elem[i]=L.elem[i-1];
for(j=i-2;LT(L.elem[0],L.elem[j]);--j)
L.elem[j+1]=L.elem[j];
L.elem[j+1]=L.elem[0];}
}
cout<<"直接插入后的排序为:"<<endl;
OutputSort(L);
}
void BInsertSort(sqlist &L){
int i,j,low,high,m;
InitList_sq(L);
InputSort(L);
for(i=2;i<=L.length;++i){
L.elem[0]=L.elem[i];
low=1;high=i-1;
while (low<=high){
m=(low+high)/2;
if(LT(L.elem[0],L.elem[m])) high=m-1;
else low=m+1;}//while
for(j=i-1;j>=high+1;--j) L.elem[j+1]=L.elem[j];
L.elem[high+1]=L.elem[0];
}//for
cout<<"折半插入后的排序为:"<<endl;
OutputSort(L);
}
void BubbleSort(sqlist &L){
int i,j;
InitList_sq(L);
InputSort(L);
for(i=1;i<L.length;++i){
for(j=2;j<=L.length;j++)
{if(LT(L.elem[j],L.elem[j-1]))
{L.elem[0]=L.elem[j];
L.elem[j]=L.elem[j-1];
L.elem[j-1]=L.elem[0];}}
}
cout<<"冒泡插入的排序为:"<<endl;
OutputSort(L);
}
int SelectMinkey(sqlist &L,int i){
int j,minkey=i;
for(j=i+1;j<=L.length;j++)
if(L.elem[j]<L.elem[minkey]) minkey=j;
return minkey;}//SelectMinkey
void SelectSort(sqlist &L)
{ int min,i;
InitList_sq(L);
InputSort(L);
for(i=1;i<L.length;i++){
int j=SelectMinkey(L,i);
if(i!=j) min=L.elem[j],L.elem[j]=L.elem[i],L.elem[i]=min;
}
cout<<"简单选择插入的排序为:"<<endl;
OutputSort(L);
}//SelectSort
int Partition(sqlist &L,int low,int high){
L.elem[0]=L.elem[low];
int pivotkey=L.elem[low];
while(low<high){
while(low<high&&L.elem[high]>=pivotkey) --high;
L.elem[low]=L.elem[high];
while(low<high&&L.elem[low]<=pivotkey) ++low;
L.elem[high]=L.elem[low];
}
L.elem[low]=L.elem[0];
return low;
}//Partiton
void QSort(sqlist &L,int low,int high){
if(low<high)
{int pivotloc=Partition(L,low,high);
QSort(L,low,pivotloc-1);
QSort(L,pivotloc+1,high);}
}//QSort
void QuickSort(sqlist &L){
InitList_sq(L);
InputSort(L);
QSort(L,1,L.length);
cout<<"快速排序为:"<<endl;
OutputS


ort(L);}//Quicksort
void HeapAdjust(sqlist &L,int s,int m){
int rc=L.elem[s];
for(int j=2*s;j<=m;j*=2){
if(j<m&&LT(L.elem[

你可能喜欢

  • 数据结构排序算法
  • 经典算法
  • JAVA编程题全集及答案
  • java快速排序
  • 数据结构算法
  • java算法大全
  • 冒泡排序算法
  • Java笔记

数据结构课程实习——选择、堆、快速、归并排序算法相关文档

最新文档

返回顶部