内部排序方法代码:冒泡排序,选择排序,插入排序,希尔排序,快速排序,二叉查找树排序,堆排序

冒泡排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void bubble(char *string,int count)
 6 {
 7     int i,j;
 8     char temp;
 9     for(j = count;j > 1;j--)
10     {
11         for(i = 0;i < j - 1;i++)
12         if(string[i + 1] < string[i])
13         {
14             temp = string[i + 1];
15             string[i + 1] = string[i];
16             string[i] = temp;
17         }
18         printf("输出结果:[%s]\n",string);
19     }
20     
21 }
22 
23 int main()
24 {
25     char string[MAX];
26     int count;
27     
28     printf("输入将排序的字符串 ==> ");
29     gets(string);
30     count = strlen(string);
31     bubble(string,count);
32     printf("\n输出排序结果:[%s]\n",string);
33 
34     return 0;
35 }

选择排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void select(char *string,int count)
 6 {
 7     int pos;
 8     int i,j;
 9     char temp;
10     for(i = 0;i < count - 1;i++)
11     {
12         pos = i;
13         temp = string[pos];
14         for(j = i + 1;j < count;j++)
15             if(string[j] < temp)
16             {
17                 pos = j;
18                 temp = string[j];
19             }
20         string[pos] = string[i];
21         string[i] = temp;
22         printf("输出结果:[%s]\n",string);
23     }
24 }
25 
26 int main()
27 {
28     char string[MAX];
29     int count;
30     
31     printf("输入将排序的字符串 ==> ");
32     gets(string);
33     count = strlen(string);
34     select(string,count);
35     printf("\n输出排序结果:[%s]\n",string);
36 
37     return 0;
38 }

插入排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void insert(char* string,int count)
 6 {
 7     int i,j;
 8     char temp;
 9     for(i = 1;i < count;i++)
10     {
11         temp = string[i];
12         j = i - 1;
13         while(j >= 0 && temp < string[j])
14         {
15             string[j + 1] = string[j];
16             j--;
17         }
18         string[j + 1] = temp;
19         printf("输出结果:[%s]\n",string);
20     }
21 }
22 
23 int main()
24 {
25     char string[MAX];
26     int count;
27     
28     printf("输入将排序的字符串 ==> ");
29     gets(string);
30     count = strlen(string);
31     insert(string,count);
32     printf("\n输出排序结果:[%s]\n",string);
33 
34     return 0;
35 }

希尔排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void shell(char* string,int count)
 6 {
 7     int pos;
 8     int offset;
 9     int i,j;
10     char temp;
11     
12     offset = count / 2;
13     while(offset != 0)
14     {
15         for(j = offset;j < count;j++)
16         {
17             temp = string[j];
18             pos = j - offset;
19             while(temp < string[pos] && pos >= 0 && j <= count)
20             {
21                 string[pos + offset] = string[pos];
22                 pos = pos - offset;
23             }
24             string[pos + offset] = temp;
25         }
26         printf("输出结果:[%s]\n",string);
27         offset = offset / 2;
28     }
29 }
30 
31 int main()
32 {
33     char string[MAX];
34     int count;
35     
36     printf("输入将排序的字符串 ==> ");
37     gets(string);
38     count = strlen(string);
39     shell(string,count);
40     printf("\n输出排序结果:[%s]\n",string);
41 
42     return 0;
43 }

希尔排序(自定增量)

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void shell(char* string,int count)
 6 {
 7     int offset_a[6] = {11,7,5,3,2,1};
 8     int pos;
 9     int offset;
10     int i,j;
11     char temp;
12     for(i = 0;i < 6;i++)
13     {
14         offset = offset_a[i];
15         for(j = offset;j < count;j++)
16         {
17             temp = string[j];
18             pos = j - offset;
19             while(temp < string[pos] && pos >= 0 && j <= count)
20             {
21                 string[pos + offset] = string[pos];
22                 pos = pos - offset;
23             }
24             string[pos + offset] = temp;
25         }
26         printf("输出结果: [%s]\n",string);
27     }
28 }
29 
30 int main()
31 {
32     char string[MAX];
33     int count;
34     
35     printf("输入将排序的字符串 ==> ");
36     gets(string);
37     count = strlen(string);
38     shell(string,count);
39     printf("\n输出排序结果:[%s]\n",string);
40 
41     return 0;
42 }

快速排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void q_sort(char* string,int left,int right)
 6 {
 7     char partition;
 8     char temp;
 9     int i,j,k;
10     if(left < right)
11     {
12         i = left;
13         j = right + 1;
14         partition = string[left];
15         do{
16             do{
17                 i++;
18                 
19               }while(string[i] < partition);
20             do{
21                 j--;
22               }while(string[j] > partition);
23             if(i < j)
24             {
25                 temp = string[i];
26                 string[i] = string[j];
27                 string[j] = temp;
28             }
29         }while(i < j);
30             temp = string[left];
31             string[left] = string[j];
32             string[j] = temp;
33             printf("输出结果:");
34             for(k = left;k <= right;k++)
35                 printf("%c",string[k]);
36             printf("\n");
37             q_sort(string,left,j-1);
38             q_sort(string,j+1,right);
39     }
40 }
41 
42 void quick(char* string,int n)
43 {
44     q_sort(string,0,n-1);
45 }
46 
47 int main()
48 {
49     char string[MAX];
50     int count;
51     
52     printf("输入将排序的字符串 ==> ");
53     gets(string);
54     count = strlen(string);
55     quick(string,count);
56     printf("\n输出排序结果:[%s]\n",string);
57 
58     return 0;
59 }

二叉查找树排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void createbtree(int* btree,int* data,int len)
 6 {
 7     int level;
 8     int i;
 9     
10     btree[1] = data[1];
11     for(i = 2;i <= len;i++)
12     {
13         level = 1;
14         while(btree[level] != 0)
15         {
16             if(data[i] > btree[level])
17                 level = level*2 + 1;
18             else
19                 level = level * 2;
20         }
21         btree[level] = data[i];
22     }
23 }
24 
25 void inorder(int* btree,int pos)
26 {
27     if(btree[pos] != 0 && pos < 16)
28     {
29         inorder(btree,pos*2 + 1);
30         printf("[%d]",btree[pos]);
31         inorder(btree,pos * 2);
32     }
33 }
34 
35 int main()
36 {
37     int btree[16];
38     int data[10] = {0,5,6,4,8,2,3,7,1,9};
39     int i;
40     for(i = 1;i < 16;i++)
41         btree[i] = 0;
42     createbtree(btree,data,9);
43     printf("二叉查找树的内容:");
44     for(i = 1;i < 16;i++)
45         printf("[%d]",btree[i]);
46     printf("\n输出的排序结果: ");
47     inorder(btree,1);
48     printf("\n");
49     return 0;
50 }
View Code

堆排序

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define MAX 20
 4 
 5 void adjust_heap(int* heap,int root,int len)
 6 {
 7     int done;
 8     int j;
 9     int temp;
10     
11     j = 2 * root;
12     temp = heap[root];
13     done = 0;
14     while(j <= len && !done)
15     {
16         if(j < len)
17             if(heap[j] < heap[j + 1])
18                 j++;
19             if(temp >= heap[j])
20                 done = 1;
21             else
22             {
23                 heap[j / 2] = heap[j];
24                 j = 2 * j;
25             }
26     }
27     heap[j / 2] = temp;
28 }
29 
30 void heap(int* heap,int len)
31 {
32     int i,j,temp;
33     
34     for(i = (len / 2);i >= 1;i--)
35         adjust_heap(heap,i,len);
36     printf("\n堆得内容:");
37     for(j = 1;j < 10;j++)
38         printf("[%d]",heap[j]);
39     printf("\n");
40     for(i = len - 1;i >= 1;i--)
41     {
42         temp = heap[i + 1];
43         heap[i + 1] = heap[1];
44         heap[1] = temp;
45         adjust_heap(heap,1,i);
46         printf("\n处理内容:");
47         for(j = 1;j < 10;j++)
48             printf("[%d]",heap[j]);
49     }
50 }
51 
52 int main()
53 {
54     int data[10] = {0,5,6,4,8,2,3,7,1,9};
55     int i;
56     printf("二叉树的内容:");
57     for(i = 1;i < 10;i++)
58         printf("[%d]",data[i]);
59     heap(data,9);
60     printf("\n\n输出排序结果:");
61     for(i = 1;i < 10;i++)
62         printf("[%d]",data[i]);
63     printf("\n");
64     return 0;
65 }
堆排序代码

posted @ 2021-01-04 14:48  互联星空  阅读(93)  评论(0编辑  收藏  举报