顺序表排序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(int i=2;i<L.length;++ i ) //直接在原始无序表L中排序
if(L.r[i].key<L.r[i-1].key) //若L.r[i]较小则插入有序子表内
{ຫໍສະໝຸດ Baidu
L.r[0].key=L.r[i].key; //先将待插入的元素放入“哨兵”位置
L.r[i].key=L.r[i-1].key; //子表元素开始后移
# define LIST_INIT_SIZE 100
#include<stdio.h>
#include<stdlib.h>
struct px
{
int key;
};
typedef struct
{
struct px r[LIST_INIT_SIZE+1]; //存储空间基址
int length;
}SqList;
}
} //for
printf("\t\t\t排序后表中元素为: ");
Dispiay_SqList(L);
printf("\n");
} //SelectSort
void main()
{for(;;)
{switch(menu_select()){
case 1:printf("\t\t\t-----------直接插入排序-------------\n");
printf("\t\t\t建立的表为: ");
Dispiay_SqList(L);
printf("\n");
}
void InsertSort(SqList &L) //直接插入排序
{
printf("\t\t\t表未建立,先建立表再查找!\n");
InitList_Sq(L); //对顺序表L作直接插入排序
{
int n;
printf("\t\t\t接收的个数: ");
scanf("%d",&n);
L.length=n;
printf("\t\t\t请输入%d个数: ",n);
for(int i=1;i<L.length+1;i++)
scanf("\t\t%d",&L.r[i].key);
++L.length;
SelectSort(L);
system("pause");
break;
case 0:printf("\t\t\t-------谢谢使用,再见!--------\n");
system("pause");
exit(0);
break;}}}宁飞飞
1.直接插入排序,升序
2.冒泡法排序。升序
3.简单选择排序,降序
printf("\t\t\t〓☆3.简单选择排序(↓)☆〓\n");
printf("\t\t\t〓☆0.退出☆〓\n");
printf("\t\t\t*********************************\n");
printf("\t\t\tGive your Choice(0-3):");
Dispiay_SqList(L);
printf("\n");
}// InsertSort
void SqListSort(SqList &L)
{
printf("\t\t\t表未建立,先建立表再查找!\n");
InitList_Sq(L);
for(int i=1;i<L.length;i++) //冒泡法排序
c=getchar();
fflush(stdin);
}while(c<'0'||c>'3');
return(c-'0');
}
void Dispiay_SqList(SqList &L)
{
for(int i=1;i<L.length;i++)
printf("%3d",L.r[i].key);
}
void InitList_Sq(SqList &L)
SqList L;
int menu_select()
{
char c;
do{system("cls");
printf("\t\t\t**********顺序表的操作***********\n");
printf("\t\t\t〓☆1.直接插入排序(↑)☆〓\n");
printf("\t\t\t〓☆2.冒泡法排序(↑)☆〓\n");
printf("\n");
}
void SelectSort(SqList &L) //简单选择排序
{
printf("\t\t\t表未建立,先建立表再查找!\n");
InitList_Sq(L);
for (int i=1,k=i; i<L.length; ++i)
{ //int j = SelectMinKey(L,i);
for(int j=1;j<L.length-i;j++)
if(L.r[j].key>L.r[j+1].key)
{
int t=L.r[j].key;
L.r[j].key=L.r[j+1].key;
L.r[j+1].key=t;
}
printf("\t\t\t排序后表中元素为: ");
Dispiay_SqList(L);
for(int j=i-2;L.r[0].key<L.r[j].key;--j )
L.r[j+1].key= L.r[j].key; //只要子表元素比哨兵大就不断后移
L.r[j+1].key= L.r[0].key; //直到子表元素小于哨兵,将哨兵值送入
//当前要插入的位置(包括插入到表首)
}
printf("\t\t\t排序后表中元素为: ");
InsertSort(L);
system("pause");
break;
case 2:printf("\t\t\t---------冒泡法排序-------------\n");
SqListSort(L);
system("pause");
break;
case 3: printf("\t\t\t------简单选择排序---------\n");
0.推出操作
//int k=i;
for(int j=i+1;j<L.length;j++)
if(L.r[j].key>L.r[k].key)
k=j;
if(k!=i)
{ // L.r[i]←→L.r[j];与第i个记录交换
int temp=L.r[i].key;
L.r[i].key=L.r[k].key;
L.r[k].key=temp;
if(L.r[i].key<L.r[i-1].key) //若L.r[i]较小则插入有序子表内
{ຫໍສະໝຸດ Baidu
L.r[0].key=L.r[i].key; //先将待插入的元素放入“哨兵”位置
L.r[i].key=L.r[i-1].key; //子表元素开始后移
# define LIST_INIT_SIZE 100
#include<stdio.h>
#include<stdlib.h>
struct px
{
int key;
};
typedef struct
{
struct px r[LIST_INIT_SIZE+1]; //存储空间基址
int length;
}SqList;
}
} //for
printf("\t\t\t排序后表中元素为: ");
Dispiay_SqList(L);
printf("\n");
} //SelectSort
void main()
{for(;;)
{switch(menu_select()){
case 1:printf("\t\t\t-----------直接插入排序-------------\n");
printf("\t\t\t建立的表为: ");
Dispiay_SqList(L);
printf("\n");
}
void InsertSort(SqList &L) //直接插入排序
{
printf("\t\t\t表未建立,先建立表再查找!\n");
InitList_Sq(L); //对顺序表L作直接插入排序
{
int n;
printf("\t\t\t接收的个数: ");
scanf("%d",&n);
L.length=n;
printf("\t\t\t请输入%d个数: ",n);
for(int i=1;i<L.length+1;i++)
scanf("\t\t%d",&L.r[i].key);
++L.length;
SelectSort(L);
system("pause");
break;
case 0:printf("\t\t\t-------谢谢使用,再见!--------\n");
system("pause");
exit(0);
break;}}}宁飞飞
1.直接插入排序,升序
2.冒泡法排序。升序
3.简单选择排序,降序
printf("\t\t\t〓☆3.简单选择排序(↓)☆〓\n");
printf("\t\t\t〓☆0.退出☆〓\n");
printf("\t\t\t*********************************\n");
printf("\t\t\tGive your Choice(0-3):");
Dispiay_SqList(L);
printf("\n");
}// InsertSort
void SqListSort(SqList &L)
{
printf("\t\t\t表未建立,先建立表再查找!\n");
InitList_Sq(L);
for(int i=1;i<L.length;i++) //冒泡法排序
c=getchar();
fflush(stdin);
}while(c<'0'||c>'3');
return(c-'0');
}
void Dispiay_SqList(SqList &L)
{
for(int i=1;i<L.length;i++)
printf("%3d",L.r[i].key);
}
void InitList_Sq(SqList &L)
SqList L;
int menu_select()
{
char c;
do{system("cls");
printf("\t\t\t**********顺序表的操作***********\n");
printf("\t\t\t〓☆1.直接插入排序(↑)☆〓\n");
printf("\t\t\t〓☆2.冒泡法排序(↑)☆〓\n");
printf("\n");
}
void SelectSort(SqList &L) //简单选择排序
{
printf("\t\t\t表未建立,先建立表再查找!\n");
InitList_Sq(L);
for (int i=1,k=i; i<L.length; ++i)
{ //int j = SelectMinKey(L,i);
for(int j=1;j<L.length-i;j++)
if(L.r[j].key>L.r[j+1].key)
{
int t=L.r[j].key;
L.r[j].key=L.r[j+1].key;
L.r[j+1].key=t;
}
printf("\t\t\t排序后表中元素为: ");
Dispiay_SqList(L);
for(int j=i-2;L.r[0].key<L.r[j].key;--j )
L.r[j+1].key= L.r[j].key; //只要子表元素比哨兵大就不断后移
L.r[j+1].key= L.r[0].key; //直到子表元素小于哨兵,将哨兵值送入
//当前要插入的位置(包括插入到表首)
}
printf("\t\t\t排序后表中元素为: ");
InsertSort(L);
system("pause");
break;
case 2:printf("\t\t\t---------冒泡法排序-------------\n");
SqListSort(L);
system("pause");
break;
case 3: printf("\t\t\t------简单选择排序---------\n");
0.推出操作
//int k=i;
for(int j=i+1;j<L.length;j++)
if(L.r[j].key>L.r[k].key)
k=j;
if(k!=i)
{ // L.r[i]←→L.r[j];与第i个记录交换
int temp=L.r[i].key;
L.r[i].key=L.r[k].key;
L.r[k].key=temp;