标签:
冒泡排序(Bubble Sort)的基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。时间复杂度为O(n2).
简单选择排序(Simple Selection Sort)的基本思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。应该说,尽管与冒泡排序同为O(n2), 但简单选择排序的性能上还是要略优于冒泡排序。
直接插入排序(Straight Insertion Sort)的基本思想:将一个记录插入到前面已经排序好的有序表中,从而得到一个新的、记录数不断加1的有序表。直接插入排序法的时间复杂度为O(n2) 。从这里也看出,同样的
O(n2)时间复杂度,直接插入排序法比冒炮和简单选择排序的性能要好一些。
1 //冒泡排序、简单选择排序、直接插入排序 2 #include "stdafx.h" 3 4 #include "stdio.h" 5 #define TRUE 1 6 #define FALSE 0 7 8 void bubblesort(int *list, int index); 9 void selectsort(int *list, int index); 10 void insertsort(int *list, int index); 11 12 typedef int status; 13 int list[20]; //默认最大长度为20 14 int temp; 15 int i, j; 16 int node; 17 status change = TRUE; 18 19 void swap(int *list, int i, int j)//交换元素 20 { 21 temp = list[i]; 22 list[i] = list[j]; 23 list[j] = temp; 24 } 25 26 void main(void) 27 { 28 int index = 0; 29 printf("Please input the value you want to sort(exit for 0):\n"); 30 scanf_s("%d", &node); 31 while (node != 0) 32 { 33 list[index] = node; 34 index += 1; 35 scanf_s("%d", &node); 36 } 37 bubblesort(list, index); 38 selectsort(list, index); 39 insertsort(list, index); 40 } 41 42 void bubblesort(int *list, int index) //冒泡排序 时间复杂度O(n2) 43 { 44 for (j = 0; j<index && change; j++) 45 { 46 change = FALSE; 47 for (i = 1; i<index - j; i++) 48 { 49 if (list[i - 1]>list[i]) 50 { 51 swap(list, i - 1, i); 52 change = TRUE; 53 } 54 } 55 } 56 printf("\n冒泡排序后为:"); 57 for (i = 0; i < index; i++) 58 { 59 printf("%d ", list[i]); 60 } 61 62 } 63 64 void selectsort(int *list, int index)//简单选择排序 时间复杂度O(n2) 65 { 66 int min; 67 for (i = 0; i < index - 1; i++) 68 { 69 min = i; 70 for (j = i + 1; j < index; j++) 71 { 72 if (list[i]>list[j]) 73 { 74 min = j; 75 } 76 if (min != i) 77 { 78 swap(list, min, i); 79 } 80 } 81 } 82 printf("\n简单选择排序后为:"); 83 for (i = 0; i < index; i++) 84 { 85 printf("%d ", list[i]); 86 } 87 } 88 89 void insertsort(int *list, int index)//直接插入排序 时间复杂度O(n2) 90 { 91 for (i = 1; i < index; i++) 92 { 93 if (list[i - 1]>list[i]) 94 { 95 temp = list[i]; 96 for (j = i; j >= 1 && list[j-1] > temp ;j--) 97 { 98 list[j] = list[j - 1]; 99 } 100 list[j] = temp; 101 } 102 } 103 printf("\n直接插入排序后为:"); 104 for (i = 0; i < index; i++) 105 { 106 printf("%d ", list[i]); 107 } 108 }
标签:
原文地址:http://www.cnblogs.com/hhboboy/p/4389487.html