发布网友 发布时间:2022-04-22 11:08
共1个回答
热心网友 时间:2023-11-02 19:48
.......数据结构书上不是有吗? ....你是没理解书上的.... 有空帮你写试试吧,,,现在不行 #include<stdio.h>#include<iostream.h>#include<iomanip.h>#include<conio.h>#include<stdlib.h>typedefintInfoType; #definen10
//假设的文件长度,即待排序的记录数目 typedefintKeyType;
//假设的关键字类型typedefstruct{
//记录类型 KeyTypekey;
//关键字项 InfoTypeotherinfo;
//其它数据项,类型InfoType依赖于具体应用而定义}RecType;typedefRecTypeSeqList[n 1]; //SeqList为顺序表类型,表中第0个单元一般用作哨兵 voidInsertSort(SeqListR); voidBubbleSort(SeqListR);voidSelectSort(SeqListR);intPartition(SeqListR,inti,intj);voidQuickSort(SeqListR,intlow,inthigh); voidmain(){ voidInsertSort(SeqListR); inti; SeqListR;
charchoice; while(1) {
system("cls");
cout<<"\n\n\n\n";
cout<<"\t\t
线性表的排序 \n";
cout<<"\t\t======================================";
cout<<"\n\n";
cout<<"\t\t
1:建立线性表
\n";
cout<<"\t\t
2:显示线性表
\n";
cout<<"\t\t
3:插入排序
\n";
cout<<"\t\t
4:冒泡排序
\n";
cout<<"\t\t
5:直接选择排序
\n";
cout<<"\t\t
6:快速排序
\n";
cout<<"\n";
cout<<"\t\t
0:退出
\n";
cout<<"\n";
cout<<"\t\t请选择:"<<flush;
choice=getch();
system("cls");
switch(choice)
{
case'1':
cout<<"请输入欲排序的数(10个):"<<endl;
for(i=1;i<=n;i )
cin>>R[i].key;
cout<<"线性表创建成功!"<<endl;
getch();
break;
case'2':
cout<<"线性表中的数据为:"<<endl;
for(i=1;i<=n;i )
cout<<R[i].key<<endl;
getch();
break;
case'3':
InsertSort(R);
cout<<"插入排序成功!"<<endl;
getch();
break;
case'4':
BubbleSort(R);
cout<<"冒泡排序成功!"<<endl;
getch();
break;
case'5':
SelectSort(R);
cout<<"直接选择排序成功!"<<endl;
getch();
break;
case'6':
QuickSort(R,1,n);
cout<<"快速排序成功!"<<endl;
getch();
break;
case'0':
exit(0);
} }} //对顺序表R中的记录R[1..n]按递增序进行插入排序voidInsertSort(SeqListR){ inti,j; for(i=2;i<=n;i ) { if(R[i].key<R[i-1].key) { R[0].key=R[i].key; R[i].key=R[i-1].key;
for(j=i-2;R[j].key>R[0].key;j--) { R[j 1].key=R[j].key; } R[j 1].key=R[0].key; } }
}//此处写入代码//} //R[1..n]是待排序的文件,采用自下而上扫描对R做冒泡排序voidBubbleSort(SeqListR){ inti,j; inthaveSwitch=0; for(i=1;i<=n;i ) { haveSwitch=0; for(j=n;j>=i;j--) {
if(R[j].key<R[j-1].key) {
R[0].key=R[j].key; R[j].key=R[j-1].key; R[j-1].key=R[0].key; haveSwitch=1; } } if(haveSwitch==0) { break; } } //此处写入代码} //对R[1..n]进行直接选择排序,用R[0]做暂存单元voidSelectSort(SeqListR){ inti,j,k; for(i=1;i<=n;i ) { k=i; for(j=i 1;j<=n;j ) {
if(R[j].key<R[k].key) { k=j; } } R[0].key=R[k].key; R[k].key=R[i].key; R[i].key=R[0].key; } //此处写入代码} //调用Partition(R,low,high)时,对R[low..high]做划分,并返回基准记录的位置intPartition(SeqListR,intlow,inthigh){ R[0].key=R[low].key; while(low<high) { while((low<high)