数据结构课程实习——选择、堆、快速、归并排序算法
各种排序算法的综合
#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&<(L.elem[
你可能喜欢
- 数据结构排序算法
- 经典算法
- JAVA编程题全集及答案
- java快速排序
- 数据结构算法
- java算法大全
- 冒泡排序算法
- Java笔记
- 排序算法 数据结构试验7页
- 数据结构的排序算法78页
- 数据结构各种排序算法的时间性能19页
- 李瑜波数据结构中的排序算法操作论文9页
- 【数据结构算法】实验9 图的拓扑排序问题(附源代码)9页
- 数据结构-各种排序算法的比较2页
- Pascal程序设计经典算法12页
- java经典100例算法题34页
- 经典算法设计方法大杂烩17页
- c语言经典算法22页
- c语言经典算法8页
- 面试经典算法c5页
- 最新JAVA编程题全集(50题及答案)32页
- JAVA编程题全集(100题及答案)w13页
- 最新JAVA编程题全集(50题及答案)58页
- 最新JAVA编程题全集(50题及答案)32页
- 最新JAVA编程题全集(63题及答案)44页
- JAVA编程题全集(100题及答案)42页
- 递归方法实现快速排序算法(java)2页
- 快速排序java程序2页
- java 快速排序分析3页
- java快速排序、冒泡排序、插入排序2页
- java 快速排序、插入排序、选择排序4页
- 快速排序原理及java实现 - sunSir的日志 - 网易博客3页
- 数据结构与算法实验指导书12页
- 北航算法与数据结构作业1答案5页
- 数据结构图算法8页
- 数据结构与算法总论8页
- 算法大全-面试题-链表-栈-二叉树-数据结构166页
- 数据结构与算法笔试题9页
- java Hash算法大全13页
- java算法大全49页
- java 排序算法代码大全9页
- 二叉树算法大全(java版)5页
- java排序算法大全16页
- java算法大全35页
- 各种排序算法(插入,冒泡,合并,希尔,快速排序)7页
- 自适应冒泡排序算法4页
- 冒泡排序算法6页
- 3.4冒泡排序算法12页
- 经典排序算法 - 冒泡排序Bubble sort3页
- 排序算法应用一(快速、选择、冒泡法排序)6页
- Java学习笔记26页
- Java工作笔记(必看经典)30页
- Java学习笔记8页
- Java基础学习笔记整理42页
- Java反射学习笔记整理16页
- 简明Java笔记29页


