博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

ypxing

学而不思则罔,思而不学则殆

见贤思齐焉,见不贤而内自省也

人不知而不愠,不亦君子乎?

   ypxing.cublog.cn
关于作者  
姓名:星云鹏 (Yunpeng Xing)
职业:IT相关
年龄:28
位置:北京
个性介绍:
Love me, feed me, 
never leave me.
失败只有一种, 那就是半途而废

我的分类  




2路归并排序

//时间复杂度为O(nlogn), 以2为底

//空间复杂度为O(n)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <assert.h>

#define ARRAY_SIZE 10

void merge(int sortArray[], int st, int md, int end)
{//st and md are the start points of two subarrays respectively

  int i, j, *temp, ptemp;
  i = st;
  j = md;
  ptemp = 0;
  temp = (int*)malloc(sizeof(int)*(end-st+1));
  while(i<md && j<end+1)
  {
    if(sortArray[i]<=sortArray[j])
    {
      *(temp+ptemp) = sortArray[i];
      i++;
    }
    else
    {
      *(temp+ptemp) = sortArray[j];
      j++;
    }
    
    ptemp++;
  }
  if (i>=md)
    for(;ptemp<end-st+1;ptemp++,j++)
      *(temp+ptemp) = sortArray[j];
  else
    for(;ptemp<end-st+1;ptemp++,i++)
      *(temp+ptemp) = sortArray[i];
  memcpy(sortArray+st, temp, ptemp*sizeof(int));
  free(temp);
}

void mergeSort(int sortArray[], int st, int end)
{
  if(end>st)
  {
    mergeSort(sortArray, st, (st+end)/2);
    mergeSort(sortArray, (st+end)/2+1, end);
    merge(sortArray, st, (st+end)/2+1, end);
  }
  
}



int main()
{
  int sortArray[ARRAY_SIZE]={30, 29, 45, 33, 21, 3, 108, 75, 99, 66};
  int i;
  mergeSort(sortArray, 0, 9);
  for(i=0;i<10;i++)
    printf("%d ", sortArray[i]);
  printf("\n");
}


其他排序方法

 发表于: 2007-07-18,修改于: 2007-11-15 14:56 已浏览623次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.01665

京ICP证041476号