//插入排序
//思路:从未排好序的序列中挨个取值,插入到已排好的解集合中O(n^2)
#include <stdio.h>
#include <stdlib.h>
#define MAXITEM 100
typedef char ElemType[5];//?
typedef struct node
{
int key;
ElemType data;
}elemnode[MAXITEM];
void insertSort(elemnode r,int n)//
{
int i,j;
for(i=2;i<=n;i++)
{
r[0]=r[i];
j=i-1;
while(j>0&&r[0].key<r[j].key)
{
r[j+1]=r[j];
j--;
}
r[j+1]=r[0];
}
printf("After sort:/n");
for(i=1;i<=n;i++) printf("%6d",r[i].key);
printf("/n");
for(i=1;i<=n;i++) printf("%6s",r[i].data);
printf("/n");
}
//选择排序
//思路:依次选出无序区段最小值归入解集合O(n^2)
void selectSort(elemnode r,int n)
{
int i,j,k;
for(i=1;i<=n-1;i++)
{
k=i;
for(j=i+1;j<=n;j++)
if(r[j].key<r[k].key) k=j; //note the key No. minute key
//exchange the position
r[0]=r[i];
r[i]=r[k];
r[k]=r[0];
}
printf("After sort:/n");
for(i=1;i<=n;i++) printf("%6d",r[i].key);
printf("/n");
for(i=1;i<=n;i++) printf("%6s",r[i].data);
printf("/n");
}
//冒泡排序
//思路:从尾到头遍历,一次遍历确定一个最小值
void bubbleSort(elemnode r,int n)
{
int i,j;
for(i=1;i<n;i++)
for(j=n;j>i+1;j--)
if(r[j].key<r[j-1].key)
{
r[0]=r[j];
r[j]=r[j-1];
r[j-1]=r[0];
}
printf("After sort:/n");
for(i=1;i<=n;i++) printf("%6d",r[i].key);
printf("/n");
for(i=1;i<=n;i++) printf("%6s",r[i].data);
printf("/n");
}
int main()
{
elemnode e={0,"",3,"jack",32,"Tom",43,"Rose",72,"Hack",42,"Ela",53,"Merry",68,"Batty"};
//insertSort(e,7);
//selectSort(e,7);
bubbleSort(e,7);
printf("Hello world!/n");
return 0;
}