zoukankan      html  css  js  c++  java
  • 归并排序的一个练习

    今天知道了Dennis Ritchie的去世,有点小消沉。大师一路走好.....

    --------------------------------------------------------------------------------------
    归并排序简单来说就是将一个集合分为若干小集合,每一小集合内部进行排序,然后将这些有序的集合进行排序都到最终的结果。归并排序的时间复杂度为nlogn。

    一个归并排序的小例子:

     1 #include<stdio.h>
    2 void merge(int array[],int result[],int low,int mid,int high){
    3 int i,j,k;
    4 printf("low = %d,mid = %d,high = %d\n",low,mid,high);
    5 for(i=low,j=mid+1,k=0;i<=mid&&j<=high;){
    6 //按大小赋值,注意++
    7 if(array[i]<array[j]){
    8 result[k++]=array[i++];
    9 }else{
    10 result[k++]=array[j++];
    11 }
    12 }
    13 //将剩余元素依次赋值
    14 while(i<=mid){
    15 result[k++]=array[i++];
    16 }
    17 while(j<=high){
    18 result[k++]=array[j++];
    19 }
    20 //将值赋到原来的数组中
    21 for(k=0;k<=high-low;k++){
    22 array[k+low]=result[k];
    23 }
    24 return;
    25 }
    26 void merge_sort(int array[],int result[],int low,int high){
    27 if(low>=high) return;
    28 int mid=(low+high)/2;
    29 merge_sort(array,result,low,mid);
    30 merge_sort(array,result,mid+1,high);
    31 merge(array,result,low,mid,high);
    32 }
    33 int main(void){
    34 int a[10]={10,9,8,7,100,22,34,1,6,0};
    35 int b[10]; //辅助数组
    36 int i;
    37 merge_sort(a,b,0,9);
    38 for(i=0;i<10;i++){
    39 printf("%d ",a[i]);
    40 }
    41 printf("\n");
    42 return 0;
    43 }

  • 相关阅读:
    ActiveX控件开发总结(续)
    Guru of the Week 条款04: 类的构造技巧
    tk
    C++中一个空类的大小为什么是1?
    虚继承
    计算机单位
    Guru of the week:#18 迭代指针.
    kingofark关于学习C++和编程的50个观点
    Guru of the Week 条款06:正确使用const
    Guru of the Week 条款07:编译期的依赖性
  • 原文地址:https://www.cnblogs.com/aLittleBitCool/p/2210744.html
Copyright © 2011-2022 走看看