当前位置:首页 > 数据结构课程设计排序算法总结
源代码:
#include
typedef struct //顺序表存储结构 {
int * elem; int length; }SqList;
int main(void) {
SqList L; SqList L1;
void InsertSort(SqList &L); void BInsertSort(SqList &L); 序
void BubbleSort(SqList &L); void SelectSort(SqList &L); 序
void QuickSort(SqList &L); 序
void QSort(SqList &L,int low,int high); int Partition(SqList &L,int low,int high);
void HeapSort(SqList &L); void HeapAdjust(SqList &L,int s,int m);
void MergeSort(SqList &L); 序
void MSort(SqList L,SqList &L1,int s,int t);
void Merge(SqList L,SqList &L1,int i,int m,int n);
int n; int * p;
printf(\请输入顺序表的长度:\ scanf(\
if((p=(int *)malloc((n+1)*sizeof(int)))==0) 存储空间 { printf(\.\\n\ exit(1); }
//直接插入排序 //折半插入排 //冒泡排序 //简单选择排 //快速排 //堆排序 //归并排//动态分配顺序表 L.elem=p; L.length=n;
if((p=(int *)malloc((n+1)*sizeof(int)))==0) //动态分配顺序表存储空间 { printf(\.\\n\ exit(1); }
L1.elem=p; L1.length=n;
printf(\请输入%d个整数:\\n\ 排序的数据
for(int i=1;i<=L.length;i++) scanf(\
printf(\选择排序算法:\\n\ printf(\直接插入排序\\n\ printf(\折半插入排序\\n\ printf(\冒泡排序\\n\
printf(\简单选择排序\\n\ printf(\快速排序\\n\
printf(\堆排序\\n\ printf(\归并排序\\n\
int change=0;
scanf(\
switch(change) { case 1: InsertSort(L);break;
case 2: BInsertSort(L);break; case 3: BubbleSort(L);break; case 4: SelectSort(L);break; case 5: QuickSort(L);break; case 6: HeapSort(L);break; case 7: MergeSort(L);break; default:break; }
//输入一组待 printf(\排序后为:\
for(i=1;i<=L.length;i++) printf(\ printf(\
return 0; }
void InsertSort(SqList &L) {
int i=0,j=0;
for(i=2;i<=L.length ;i++) if(L.elem[i]
void BInsertSort(SqList &L) {
int i=0,j=0,low=0,high=0,m=0; 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(L.elem [0]>L.elem [m]) low=m+1; else high=m-1; } for(j=i-1;j>=high+1;j--) L.elem [j+1]=L.elem [j]; L.elem [high+1]=L.elem[0]; } }
//复制为哨兵
void BubbleSort(SqList &L) {
int i=0,j=0;
for(i=L.length;i>=2;i--) for(j=1;jL.elem [j+1]) { L.elem[0]=L.elem [j]; L.elem [j]=L.elem [j+1]; L.elem [j+1]=L.elem[0]; } } }
void SelectSort(SqList &L) {
int index=0;
for(int i=1;i<=L.length-1 ;i++) { index=i; for(int j=i+1;j<=L.length ;j++) if(L.elem [j] //快排 int Partition(SqList &L,int low,int high) { //将L.elem[low...high]一分为二 int pivot=0; 作枢轴 pivot=L.elem[low]; while(low //用子表第一个记录
共分享92篇相关文档