C语言-直接排序
#include<stdio.h> #define MAXSIZE 100 typedef int KeyType; typedef struct { KeyType key; }RecordType; typedef struct { RecordType r[MAXSIZE+1]; int length; }RecordList; RecordList L; /* void InsertSort(RecordList L) { int j; for(int i=2;i<=L.length;i++) { L.r[0].key=L.r[i].key; for(j=i-1;L.r[0].key<L.r[j].key;j--) L.r[j+1]=L.r[j]; L.r[j+1].key=L.r[0].key; } }*/ //直接插入排序的函数 void InsertSort(RecordList *L) //形参需要传入一个纪录表 { int i, j; for (i = 2; i <= L->length; i++) { L->r[0] = L->r[i]; //将待插纪录设为监视哨 for (j = i-1; L->r[0].key < L->r[j].key; j--) L->r[j+1] = L->r[j]; //如果比较发现小于j位置的值就,纪录后移 L->r[j+1] = L->r[0]; //将待查纪录插到正确位置 } } void BubbleSort(RecordList *L) { RecordList t; int j; int flag=1; for(int i=1;flag;i++) { flag=0;//重置真假 for(j=1;j<=L->length-i;j++) if(L->r[j].key>L->r[j+1].key) { t.r[0]=L->r[j]; L->r[j]=L->r[j+1]; L->r[j+1]=t.r[0]; flag=1; } } } int main() { KeyType key; RecordList L1; int num,i; int j; scanf("%d",&L1.length); { printf("请输入5个数:\n"); for(i=1;i<=L1.length;i++) scanf("%d",&L1.r[i]); } printf("\n"); printf("请输入你要选择的排序方式(1/2):"); printf("1.直接插入法!"); printf("2.冒泡排序法!"); scanf("%d",&num); switch(num) { case 1:InsertSort(&L1); break; case 2:BubbleSort(&L1); break; default: printf("输入错误!"); } for(i=1;i<=L1.length;i++) { printf("%3d",L1.r[i]); } }