日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中的数组排序

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中的数组排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include <stdio.h>

void Mpass(int x[],int y[],int k,int n);?/*聲明其為函數*/
void Msort(int x[],int y[],int n);???/*聲明其為函數*/

int main(void)
{
?/*要排序整型數據序列*/
?int a[] = {26,5,37,1,61,11,59,15,48,19};
?int y[10];????/*用于暫時存儲數據*/
?int i;
?printf("源數據為:??? ");?/*將源數據打印出來*/
?for(i = 0;i<10;i++)
?printf("[%2d]",a[i]);
?Msort(a,y,10);??/*對源數據進行合并排序*/
?printf("\n排序后的數據為:? ");
?for(i = 0;i<10;i++)???/*將排序結果打印出來*/
?printf("%4d",a[i]);
?printf("\n");
?return 0;
}

void Mpass(x,y,k,n)
int x[];?????/*要排序的數組*/
int y[];?????/*用于存儲臨時數據的數組*/
int k;????/*表示當前序列中有若干長度為k的相鄰有序子序*/
int n;????/*要排序序列的長度為n*/
?
{
?int i,j;
?int?strat1,end1;?/*對應第一個有序子序列L1起始和終止位置號*/
?int?strat2,end2;?/*對應第二個有序子序列L2起始和終止位置號*/
?int?m;????/*表示輸入y中當前記錄應放置的位置號*/
?strat1 = 0;
?m = 0;
?while(strat1+k<=n-1)??/*當第一個子序列沒有占據整個x數組*/
?{
??strat2 = strat1+k;??/*為兩個有序子序列起始終止位置號賦值*/
??end1 = strat2-1;
??/*如果第二的子序列長度不夠k,則其終止位置號為n-1*/
??end2 = (strat2+k-1<=n-1)?strat2+k-1:n-1;
??for(i = strat1,j = strat2;i<=end1&&j<=end2;m++)
??{
???if(x[i]<=x[j])
???{
????y[m] = x[i];
????i++;
???}
???else
???{
????y[m] = x[j];
????j++;
???}
??}
??while(i<= end1)
??{
???y[m] = x[i];
???m++;
???i++;
??}
??while(j<= end2)
??{
???y[m] = x[j];
???m++;
???j++;
??}
??strat1 = end2+1;
?}
?/*將另一個序列中剩余的所有記錄依次放到數組y中*/
?for(i=strat1;i<n;i++,m++)??
??y[m] = x[i];
}

void Msort(x,y,n)
int x[];???/*要排序的數組*/
int y[];???/*用于存儲臨時數據的數組*/
int n;????/*數組長度*/
{
?int i,k,count;
?k = 1;
?count = 1;
?while(k<n)????/*當子序列比整個序列小時*/
?{
??Mpass(x,y,k,n);??/*歸并兩有序子序列*/?
??for(i= 0;i<n;i++)
???x[i] = y[i];?/*返回數據*/
??printf("\n第%2d步后的結果==>? ",count++);
???for(i = 1;i<n+1;i++)
??{
???if((i ==n)&&((i%(2*k)!=0)))
????printf("%4d]",x[i-1]);
???else
???{
????if((i%(2*k)==1))
?????printf("[%2d",x[i-1]);
????else if((i%(2*k))==0)
?????printf("%4d]",x[i-1]);
????else
?????printf("%4d",x[i-1]);
???}
??}
??k = 2*k;??/*一次歸并后新的有序子序列的長度*/
?}
}

?

?

總結

以上是生活随笔為你收集整理的C语言中的数组排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。