1、直接插入排序
#include <stdio.h>
#define MAXSIZE 20
typedef struct{
int key;
int others;
}RecordType;
void sort(RecordType array[],int n){
int j = 0;
for(int i=2;i<n;i++){
if(array[i].key < array[i-1].key){
array[0] = array[i];
j = i-1;
while(array[j].key > array[0].key){
array[j+1] = array[j];
j--;
}
array[j+1] = array[0];
}
}
}
int main(){
int x;
int i=1;
RecordType array[MAXSIZE];
printf("请输入一组数据。(-1停止)\n");
scanf("%d",&x);
while(x != -1){
array[i].key = x;
i++;
scanf("%d",&x);
}
printf("数组中的内容:\n");
for(int j=1;j<i;j++){
printf("%d ",array[j].key);
}
sort(array,i);
printf("\n");
printf("排序后数组中的内容:\n");
for(int k=1;k<i;k++){
printf("%d ",array[k].key);
}
return 0;
}
2、折半插入排序
#include <stdio.h>
#define MAXSIZE 20
typedef struct{
int key;
int others;
}RecordType;
void BSort(RecordType array[],int n){
int low,high,mid;
for(int i=2;i<n;i++){
array[0] = array[i];
low = 1;
high = i-1;
while(low <= high){
mid = (low + high)/2;
if(array[mid].key < array[0].key){
low = mid + 1;
}else{
high = mid - 1;
}
}
for(int j=i-1;j>=high+1;j--){
array[j+1] = array[j];
}
array[high+1] = array[0];
}
}
int main(){
int x;
int i=1;
RecordType array[MAXSIZE];
printf("请输入一组数据。(-1停止)\n");
scanf("%d",&x);
while(x != -1){
array[i].key = x;
i++;
scanf("%d",&x);
}
printf("数组中的内容:\n");
for(int j=1;j<i;j++){
printf("%d ",array[j].key);
}
BSort(array,i);
printf("\n");
printf("排序后数组中的内容:\n");
for(int k=1;k<i;k++){
printf("%d ",array[k].key);
}
printf("\n");
return 0;
}