1 // 2 // Created by jia on 19/12/18. 3 // 4 #include "../header.h" 5 //information 6 void print_label(char* string){ 7 printf("%s ", string); 8 } 9 //oupt array 10 void arr_output(int n, int arr[]){ 11 for(int i = 0; i < n; i ++){ 12 printf("arr[%d] = %4d ", i, arr[i]); 13 } 14 15 printf(" "); 16 } 17 //swap two datas to make sure the first is smaller than the second 18 void data_swap(int* a, int* b){ 19 if(*a > *b){ 20 int temp = *a; 21 *a = *b; 22 *b = temp; 23 } 24 } 25 26 //improved bubble sort 27 void improvedbubblesort(int n, int arr[]) { 28 bool sorted = true; 29 for (int i = 0; i < n; i++) 30 for (int j = 0; j < n - i - 1; j++) { 31 data_swap(&arr[j], &arr[j + 1]); 32 sorted = false; 33 } 34 if (sorted) { 35 return; 36 } 37 arr_output(n, arr); 38 } 39 //bubble sort 40 void bubblesort(int n, int arr[]){ 41 for(int i = 0; i < n; i ++) 42 for(int j = 0; j < n - i - 1; j ++){ 43 data_swap(&arr[j], &arr[j + 1]); 44 } 45 arr_output(n, arr); 46 } 47 //other sort 48 void othersort(int n, int arr[]){ 49 for(int i = 0; i < n; i ++) 50 for(int j = i; j < n; j ++){ 51 data_swap(&arr[i], &arr[j]); 52 } 53 arr_output(n, arr); 54 } 55 56 //insertion sort 57 void insertionsort(int n, int arr[]){ 58 for(int i = 0; i < n; i ++){ 59 int temp = arr[i]; 60 bool hasmoved = false; 61 bool notplaced = true; 62 for(int j = i - 1; j >= 0; j --){ 63 if(arr[j] > temp){ 64 //shift numvers till you find it's right location 65 arr[j + 1] = arr[j]; 66 hasmoved = true; 67 }else{ 68 arr[j+1] = temp; 69 notplaced = false; 70 break; 71 } 72 } 73 if(hasmoved && notplaced){ 74 arr[0] = temp; 75 } 76 } 77 arr_output(n, ARR); 78 } 79 80 void selectionsort(int n, int arr[]){ 81 for(int j = n -1; j < n; j --){ 82 int pos = 0; 83 for(int i = 1; i <= j; i ++){ 84 if(arr[i] > arr[pos]){ 85 pos = i; 86 } 87 data_swap(&arr[pos], &arr[j]); 88 } 89 } 90 arr_output(n, ARR); 91 } 92 void mergesort(int n, int arr[]){ 93 94 } 95 96 //void (*cmc_result)(int n, int arr[]) function pointer to point the function 97 void getsort(int t, void (*cmc_result)(int n, int arr[])){ 98 switch(t){ 99 case 0:{ 100 print_label("bubble sort:"); 101 //bubblesort(N, ARR); 102 cmc_result(N, ARR); 103 } break; 104 case 1:{ 105 print_label("other sort:"); 106 othersort(N, ARR); 107 //cmc_result(N, ARR); 108 109 //cmc_result = othersort; 110 } break; 111 case 2:{ 112 print_label("improved sort:"); 113 cmc_result(N, ARR); 114 } break; 115 case 3:{ 116 print_label("insertion sort:"); 117 cmc_result(N, ARR); 118 //cmc_result = othersort; 119 } break; 120 case 4:{ 121 print_label("selection sort:"); 122 cmc_result(N, ARR); 123 } break; 124 } 125 }