1. 程式人生 > >本博停更 新部落格:dengwenhuo.cn

本博停更 新部落格:dengwenhuo.cn

主要對數目多的數 拆分再排 總的來說耗時還蠻少的   具體函式的操作看圖片

看了一下書 寫了一個 感覺不是特別好 畢竟一般調函式sort

#include <stdio.h>

#include <malloc.h>


void bin(int *a,int *b,int start,int mid,int end)
{
int k=0;
int i=start,j=mid,m=mid+1,n=end;
while(i<=j && m<=n)
{
if(a[i]<=a[m])
b[k++]=a[i++];
else b[k++]=a[m++];
}           //對兩個數列的頭 看哪個大 直到一個結束 然後另外一個剩下的就接進來
while(i<=j)
b[k++]=a[i++];
while(m<=n)
b[k++]=a[m++];


for(i=0;i<k;i++)

a[start+i]=b[i];   //將排好序的序列 替代原數列的數
}




void gui(int *a,int *b,int start,int end)
{
if(start<end)
{
int mid=(start+end)/2;      
gui(a,b,start,mid);
//拆分成前半列
gui(a,b,mid+1,end);
//後半列 直接到剩下一個 然後一個一個接起來排
bin(a,b,start,mid,end);
//將兩序列排序
}
}

int main()
{
int a[]={6,3,11,55,33,767,35,8,62,70,23,10};
int *b;
b=(int *)malloc(sizeof(int)*12);  //申請空間
gui(a,b,0,11);
for(int i=0;i<12;i++)
printf("%d ",a[i]);
return 33;
}
<img src="https://img-blog.csdn.net/20150612092001541?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQTg1Mjg1Mjg1Mjg1Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: Arial, Helvetica, sans-serif;" alt="" />