Merge Sort O(nlog2n)
#include <stdio.h> void mergeOrder(int* p, int len); int input(int* array) { int n; int i = 0; while(1) { scanf("%d", &n); if(n == -1) break; *array = n; array++; i++; } return i; } int main() { int array[100]; int len; len = input(array); int arr[100]; // bubbleOrder(array); // quickOrder(array, len); // selectOrder(array,len); // insertOrder(array, len); mergeOrder(array, len); for(int i =0; array[i] != '\0'; i++) { printf("number is:%d\r\n", array[i]); } return 0; } void Merge(int array[], int start, int mid, int end) { int temp[100] = {0}; int i; int j; int k; for (i = start, j = mid+1, k = 0; k <= end-start; k++) { if (i == mid+1) { temp[k] = array[j++]; continue; } if (j == end+1) { temp[k] = array[i++]; continue; } if (array[i] < array[j]) { temp[k] = array[i++]; } else { temp[k] = array[j++]; } } for (i = start, j = 0; i <= end; i++, j++) { array[i] = temp[j]; } } void MSort(int array[], int start, int end) { if (start < end) { int i; i = (end + start) / 2; MSort(array, start, i); MSort(array, i + 1, end); Merge(array, start, i, end); } } void mergeOrder(int* p, int len) { MSort(p, 0, len-1); }