程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 排序之歸並操作

排序之歸並操作

編輯:C++入門知識

歸並操作(merge),也叫歸並算法,指的是將兩個已經排序的序列合並成一個序列的操作。   如 設有數列{6,202,100,301,38,8,1}   初始狀態: [6] [202] [100] [301] [38] [8] [1] 比較次數   i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3   i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4   i=3 [ 1 6 8 38 100 202 301 ] 4   總計: 11次   c語言實現如下: [cpp]   #include <stdio.h>   #include <string.h>   #include <malloc.h>      void display(int array[],int size){           printf("the array is:");           int i;           for(i=0;i<size;i++){                   printf("%d ",array[i]);           }           printf("\n");   }      //將a數組中first開始mid結束的數組,mid+1開始last結束的數組 進行合並,再存放回a中   void mergearray(int a[], int first, int mid, int last, int temp[])   {       int i = first, j = mid + 1;       int m = mid,   n = last;       int k = 0;          while (i <= m && j <= n)       {           if (a[i] <= a[j])               temp[k++] = a[i++];           else               temp[k++] = a[j++];       }          while (i <= m)           temp[k++] = a[i++];          while (j <= n)           temp[k++] = a[j++];          for (i = 0; i < k; i++)           a[first + i] = temp[i];   }      void sort(int a[], int first, int last, int temp[]){           if (first < last)       {           int mid = (first + last) / 2;       //左側的數組進行排序           sort(a, first, mid, temp);       //右側的數組進行排序           sort(a, mid + 1, last, temp);       //將左右數組進行合並           mergearray(a, first, mid, last, temp);       }   }      int main(void){           int array[10]={34,45,1,39,21,68,65,100,4,51};           display(array,10);       //申請臨時數組,用於存放合並的數組           int* temp = (int *)malloc(sizeof(int)*10);           memset(temp,0,10);       //歸並算法函數           sort(array,0,10-1,temp);       free(temp);       temp = null;           display(array,10);           return 0;   }        

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved