代码如下:(未注释掉文件的读写函数)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
#define CLR(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
#define MAX 10000
int n; //数据的个数
void Welcome()
{
puts("*******************");
puts("* 请输入排序方法:*");
puts("* 1.冒泡排序 *");
puts("* 2.链表选择排序 *");
puts("*******************");
}
typedef struct LNode
{
int num; //数据域
struct LNode *next; //指针域
}LNode,*LinkList;
void BubbleSortMethod(int *num) //冒泡排序
{
printf ("请输入%d个数:\n",n);
for (int i = 1 ; i <= n ; i++)
scanf ("%d",&num[i]);
//开始排序
int pos = n-1; //最后进行交换的位置
while(pos != 1)
{
int t = 1;
for (int j = 1 ; j <= pos ; j++) //只需要交换到pos位置就行了
{
if (num[j] > num[j+1])
{
swap(num[j],num[j+1]); //交换
t = j;
}
}
pos = t; //记录位置
}
//输出
printf ("排序完成,排序后的序列为:\n");
for (int i = 1 ; i <= n ; i++)
printf ("%d%c",num[i],i == n ? '\n' : ' ');
}
void InitNode(LinkList &p) //新建一个节点
{
p = (LNode *)malloc(sizeof(LNode));
p->next = NULL;
}
void InputLinkList(LinkList L)
{
LinkList p;
for(int i = 1 ; i <= n ; i++)
{
InitNode(p);
scanf ("%d",&p->num);
L->next = p;
L = L->next;
}
}
void LinkListDestroy(LinkList L)
{
if (L == NULL)
return;
LinkListDestroy(L->next);
free(L);
}
void SelectSort(LNode &head)
{
printf ("请输入%d个数:\n",n);
InputLinkList(&head); //输入数据
//开始排序
LinkList left,Min,pos; //待交换节点、当前数据最小节点、滚动节点
left = Min = head.next;
while(left->next != NULL)
{
pos = left;
while (pos != NULL) //滚动寻找最小数据
{
if (Min->num > pos->num)
Min = pos;
pos = pos->next;
}
swap(left->num,Min->num); //直接交换两者的数据域即可
left = Min = left->next;
}
//输出
printf ("排序完成,排序后的序列为:\n");
left = head.next;
while(left != NULL)
{
printf ("%d%c",left->num,left->next == NULL ? '\n' : ' ');
left = left->next;
}
LinkListDestroy(head.next); //清空链表
}
int main()
{
freopen("input.txt","r",stdin);
freopen("MyOuput.txt","w",stdout);
int num[MAX+4];
LNode head;
head.next = NULL;
puts("请输入要排序的数的个数,输入0结束程序:");
while (~scanf ("%d",&n) && n)
{
Welcome();
int op; //操作
while (~scanf ("%d",&op))
{
if (op != 1 && op != 2)
puts("输入有误,请重新输入:");
else
break;
}
if (op&1)
BubbleSortMethod(num);
else
SelectSort(head);
puts("");
puts("请输入要排序的数的个数,输入0结束程序:");
}
puts("谢谢您的使用,按任意键退出程序!");
system("pause");
return 0;
}生成测试数据:
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <cstring>
#include <time.h>
#include <algorithm>
using namespace std;
#define CLR(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
int main()
{
freopen("input.txt","w",stdout); //写出数据
int n;
int u = 100;
srand(unsigned(time(NULL)));
while(u--)
{
n = (rand() % 100) + 10;
printf ("%d 1 ",n);
for (int i = 1 ; i <= n ; i++)
printf ("%d ",rand());
printf ("\n");
}
u = 100;
while(u--)
{
n = (rand() % 100) + 10;
printf ("%d 2 ",n);
for (int i = 1 ; i <= n ; i++)
printf ("%d ",rand());
printf ("\n");
}
puts("0");
return 0;
}标准输出:
#include <cstdio>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#define CLR(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
#define LL long long
int main()
{
freopen("input.txt","r",stdin);
freopen("StdOutput.txt","w",stdout);
int n;
int num[122];
while (~scanf ("%d",&n) && n)
{
int t;
scanf ("%d",&t); //吸收排序方法的数字
for (int i = 1 ; i <= n ; i++)
scanf ("%d",&num[i]);
sort(num+1,num+1+n);
for(int i = 1 ; i <= n ; i++)
printf ("%d ",num[i]);
puts("");
}
return 0;
}