#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 100
typedef int keyType;
typedef struct{
keyType key;
}RecType;
typedef struct SqList{
RecType r[MAX_SIZE];
int length;
}SqList;
SqList write(SqList L){
int i=1;
char x;
do{
scanf("%d",&L.r[i].key);
L.length=i;
i++;
}while((x=getchar())!='\n');
return L;
}
void output(SqList L){
for(int j=1;j<=L.length;j++){
printf("%d ",L.r[j].key);
}
printf("\n");
}
void InsertSort(SqList &S)
{ SqList L=S;
int i,j;
for( i=2; i<=L.length;i++)
{
if(L.r[i].key < L.r[i-1].key)
{
L.r[0] = L.r[i];
L.r[i] = L.r[i-1];
for( j=i-2; (L.r[0].key < L.r[j].key); j--)
L.r[j+1] = L.r[j];
L.r[j+1] = L.r[0];
}
}
printf("直接插入排序:\n");
output(L);
}
void BubbleSort(SqList &S)
{
SqList L=S;
int i,j;
for(i=1;i<L.length;i++)
{
int flag = 1;
for(j=1;j<=L.length-i;j++)
if(L.r[j].key > L.r[j+1].key)
{
flag = 0;
int temp;
temp = L.r[j].key;
L.r[j].key = L.r[j+1].key;
L.r[j+1].key = temp;
}
if(flag==1)
break;
}
printf("冒泡排序:\n");
output(L);
}
int Partition(SqList &L,int low,int high)
{
L.r[0] = L.r[low];
int pivotkey = L.r[low].key;
while(low < high)
{
while(low<high && L.r[high].key>=pivotkey)
high--;
L.r[low] = L.r[high];
while(low<high && L.r[low].key<=pivotkey)
low++;
L.r[high] = L.r[low];
}
L.r[low] = L.r[0];
return low;
}
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);
}
}
void quick_Sort(SqList &S){
SqList L=S;
QSort(L,1,L.length);
printf("快速排序:\n");
output(L);
}
void simple_selection_sort(SqList &S)
{
SqList L=S;
int min;
int j;
for (int i = 1; i <L.length; i++)
{
j = i;
min = L.r[i].key;
for (int k = i; k <= L.length; k++)
{
if (L.r[k].key < min)
{ min = L.r[k].key ;
j = k;
}
}
if (i != j)
{
int temp = L.r[i].key;
L.r[i].key = L.r[j].key;
L.r[j].key = temp;
}
}
printf("简单选择排序:\n");
output(L);
}
int main(){
SqList S;
S=write(S);
InsertSort(S);
BubbleSort(S);
simple_selection_sort(S);
quick_Sort(S);
system("pause");
return 0;
}