• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

cynchanpin

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

C++归并算法

#include <iostream>
using namespace std;

void DealWhat(int ar[],int start,int end,int b[])
{
    int mid = (start + end) / 2;    
    int i = start;
    int j = mid+1;
    int k = start;
    //将start到end区间划分为两个部分。对这两个部分进行合并排序。每一个部分应该是有序的。由于我们是从一个数字開始排序,
    //直到多个数字的排序,所以部分一定是有序的,逆向逐渐有序。

while (i <= mid && j <= end) { if (ar[i] > ar[j]) { b[k++] = ar[j]; j++; } else { b[k++] = ar[i]; i++; } } while (i <= mid) { for (; i <= mid; i++) { b[k++] = ar[i]; } } while (j <= end) { for (; j <= end; j++) { b[k++] = ar[j]; } }//以上是合并排序。 k = 0; for (int m = start; m <= end; m++) { ar[m] = b[m];//ar数组的值也应该对应的变化。由于在start到end之间已经排序好了,我们仅仅须要将排序好的覆盖ar数组上面去。 //为下次递归排序做准备工作。 } } void Grial(int ar[],int start,int end,int b[]) { if (start >= end)return; int mid = (start + end) / 2;//每次取1/2递归深入。

Grial(ar, start, mid ,b);//左边。 Grial(ar,mid+1, end,b);//右边。 DealWhat(ar,start, end,b);//处理函数,直到递归到单个数字。

} int main() { int a[] = {100,2,3,1,99,32,4,11,324,0}; int *b = new int[10]; Grial(a,0,9,b); for (int i = 0; i < 10; i++) { cout << b[i]<<" " ; } cout << endl;//事实上这一步数组b到这个地方就能够delete了,由于数组a也随着排序改变。借助b这个辅助空间 //间接的排序原来的数组,本来能够不须要在外面传递b,只是我也不想改动了。 for (int i = 0; i < 10; i++) { cout << a[i]<<" "; } cout << endl; return 0; }

感悟:
思想的重要性,假设你的思想没有在你编程时产生火焰,即使你对别人
思想理解的再深刻,终究仅仅是别人的东西。时间一长,你就会发现你已经
被这些看似光芒四射的东西所奴役。就会越来越累。

哈哈,拙见,一起努力。

posted on 2017-06-15 09:55  cynchanpin  阅读(330)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3