C語言分治法實(shí)現(xiàn)歸并排序
本文實(shí)例為大家分享了C語言實(shí)現(xiàn)歸并排序的具體代碼,供大家參考,具體內(nèi)容如下
歸并排序的基本思想:
將兩個及其以上的有序表合并為一張有序表,把待排序序列通過分治法分為若干個有序子序列,然后每兩個子序列合并為一個子序列,經(jīng)過多次合并后整合為一張有序表。
排序過程如圖:

代碼如下:
#include "stdio.h"
#define MAX 100
int is1[MAX],is2[MAX];//原數(shù)組is1,臨時(shí)空間數(shù)組is2
void merge(int low,int mid,int high){
int i=low,j=mid+1,k=low;
while(i<=mid&&j<=high)
if(is1[i]<is1[j])
is2[k++]=is1[i++];
else
is2[k++]=is1[j++];
while(i<=mid)
is2[k++]=is1[i++];
while (j<=high)
is2[k++]=is1[j++];
for ( i = low; i <=high ; i++) {
is1[i]=is2[i];
printf("%5d",is1[i]);
}
printf("\n");
}
void mergeSort(int a, int b){
if(a<b){
int mid=(a+b)/2;
mergeSort(a,mid);
mergeSort(mid+1,b);
merge(a,mid,b);
}
}
void main(){
int i,n;
printf("請輸入元素個數(shù):");
scanf("%d",&n);
printf("請依次輸入每個元素:\n");
for ( i = 1; i <=n ; ++i) {
scanf("%d",&is1[i]);
}
mergeSort(1,n);
printf("排序后的序列為:\n");
for ( i = 1; i <=n ; ++i) {
printf("%4d",is1[i]);
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
淺析C語言中strtol()函數(shù)與strtoul()函數(shù)的用法
這篇文章主要介紹了淺析C語言中strtol()函數(shù)與strtoul()函數(shù)的用法,注意其將字符串轉(zhuǎn)換成long型的區(qū)別,需要的朋友可以參考下2015-08-08
C++強(qiáng)制轉(zhuǎn)換與智能指針示例詳解
這篇文章主要介紹了C++強(qiáng)制轉(zhuǎn)換與智能指針示例,智能指針(Smart Pointer)是一種抽象的數(shù)據(jù)類型。在程序設(shè)計(jì)中,它通常是經(jīng)由類模板來實(shí)現(xiàn),借由模板來達(dá)成泛型,借由類別的析構(gòu)函數(shù)來達(dá)成自動釋放指針?biāo)赶虻拇鎯ζ骰驅(qū)ο?/div> 2022-11-11
c++中為什么可以通過指針或引用實(shí)現(xiàn)多態(tài)詳解
這篇文章主要給大家介紹了關(guān)于c++中為何可以通過指針或引用實(shí)現(xiàn)多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
超詳細(xì)分析C語言動態(tài)內(nèi)存管理問題
動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理2022-04-04
深入Windows下的回車是回車換行(\r\n)還是換行回車(\n\r)的詳解
本篇文章對Windows下的回車是回車換行(\r\n)還是換行回車(\n\r)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05最新評論

