内部排序方法代码:冒泡排序,选择排序,插入排序,希尔排序,快速排序,二叉查找树排序,堆排序
冒泡排序
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 }
堆排序
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 }