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);
}

  

posted @ 2013-03-18 16:15  通杀  阅读(243)  评论(0编辑  收藏  举报