+ -
当前位置:首页 → 问答吧 → 快速排序和归并排序的比较

快速排序和归并排序的比较

时间:2010-07-14

来源:互联网

我不会分析算法,, 书上说归并排序的最坏时间是O(N logN), 而快速排序的平均时间是O(N logN),, 同时又说快速排序用的最广泛,,因为归并排序要一个额外的数组和一些缓慢的复制,, 那如果我能够把这些去掉, 归并排序会不会在实际应用中比快速排序更快?

作者: yylogo   发布时间: 2010-07-14

各有所长吧,不同情况选择不同的算法。
你可以试试,不过应该不太容易。

作者: donglongchao   发布时间: 2010-07-14

复杂度跟执行的快慢不完全是一回事

作者: hellioncu   发布时间: 2010-07-14

理论上归并比较快,实际上快排比较快。

作者: peijue   发布时间: 2010-07-14

  1. #define swap(a, b) do{\
  2.         a ^= b;\
  3.         b ^= a;\
  4.         a ^= b;\
  5. }while(0)
  6. void msort(int a[], int n);

  7. void merge(int a1[], int l1, int a2[], int l2)
  8. {
  9.         int i = 0, j = 0;
  10.         while(i < l1 && j < l2){
  11.                 if(a1[i] > a2[j]){
  12.                         swap(a1[i], a2[j]);
  13.                         i++;
  14.                 }else{
  15.                         i++;
  16.                 }
  17.         }
  18.         msort(a2, l2);
  19. }

  20. void msort(int a[], int n)
  21. {
  22.         if(n == 1){
  23.                 return;
  24.         }
  25.         msort(a, n / 2);
  26.         msort(&a[n / 2], n - n / 2);
  27.         merge(a, n / 2, &a[n / 2], n - n / 2);
  28. }
复制代码

作者: yylogo   发布时间: 2010-07-14

帮我评价下看看.

作者: yylogo   发布时间: 2010-07-14