1、直接插入排序
1 #include<stdio.h>
2
3 struct node
4 {
5 int key;
6 };
7 typedef struct node DataType;
8
9 int Ins_Sort(DataType Ar[],int n);
10
11 int main(void)
12 {
13
14 int n,i;
15 DataType array[20];
16
17 printf("Input the length of the array <<20>:");
18 scanf("%d",&n);
19 for(i=0; i<n; i++) //输入数组
20 {
21 printf("Input %d datas:",i+1);
22 scanf("%d",&array[i]);
23 }
24
25 printf("\n The array are:");
26 for(i=0; i<n; i++)
27 {
28 printf("%4d",array[i]); //输入的数组显示
29 }
30
31 Ins_Sort(array, n);
32
33 printf("\n The array after Ins_Sort are:");
34 for(i=0; i<n; i++) //输出排序后的算法结果
35 {
36 printf("%4d",array[i]);
37 }
38 return(0);
39 }
40
41
42 int Ins_Sort(DataType Ar[],int n) //直接插入排序算法
43 {
44 int i,j;
45 DataType temp;
46 for(i=1;i<n;i++) //总共要进行n-1扫描
47 {
48 temp=Ar[i]; //每次扫描总是把被考察排序码存入临时单元
49 j=i-1; //j规定了这次比较范围的上界
50 while((temp.key<Ar[j].key)&&(j>=0))
51 {
52 Ar[j+1]=Ar[j];
53 j--;
54 }
55 Ar[j+1]=temp; //完成插入
56 }
57 }
2、直接选择排序算法
1 #include<stdio.h>
2
3 struct node
4 {
5 int key;
6 };
7 typedef struct node DataType; //DataType是struct node的别名
8
9 int Sel_sort(DataType Ar[],int n); //声明直接选择排序算法
10
11 int main(void)
12 {
13
14 int n,i;
15 DataType array[20];
16
17 printf("Input the length of the array <<20>:");
18 scanf("%d",&n);
19 for(i=0; i<n; i++) //输入数组
20 {
21 printf("Input %d datas:",i+1);
22 scanf("%d",&array[i]);
23 }
24
25 printf("\n The array are:");
26 for(i=0; i<n; i++)
27 {
28 printf("%4d",array[i]); //输入的数组显示
29 }
30
31 Sel_sort(array,n); //调用排序算法
32 printf("\n The array after Sel_sort are:");
33 for(i=0; i<n; i++) //输出排序后的算法结果
34 {
35 printf("%4d",array[i]);
36 }
37 return(0);
38 }
39
40 int Sel_sort(DataType Ar[],int n) //直接选择排序算法
41 {
42 DataType temp;
43 int i,small,j;
44 for(i=0; i<=n-1; i++) //i控制n-1趟扫描
45 {
46 small=i; //用变量small记住当前最小排序码的位置
47 for(j=i+1; j<n; j++) //j控制这趟扫描的比较范围
48 if(Ar[j].key<Ar[small].key) //如果发现更小者,随时修改small的值
49 small=j;
50 if(small!=i) //small与比较范围首元素下标不同,则交换
51 {
52 temp=Ar[i]; //交换是利用临时变量temp进行的
53 Ar[i]=Ar[small];
54 Ar[small]=temp;
55 }
56 }
57 }
58 //直接选择排序的效率与初始状态无关,即无最好最坏的情况.时间复杂度为O(n*n),不是稳定的排序算法