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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)

發(fā)布時(shí)間:2023/12/4 C# 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? 原理:每隔sp(整數(shù))個(gè)數(shù)即取數(shù)并判斷大小,交換,先構(gòu)造局部有序序列,直到sp1,構(gòu)造完整的有序序列。

? ? ? ? 給出一組數(shù)據(jù),如下:

?

0

1

2

3

4

5

6

7

8

9

49

38

65

97

76

13

27

49

55

4

? ? ? ? 對這個(gè)數(shù)據(jù),將sp設(shè)為5,即先取49,與13比較,進(jìn)行交換;再取38,與27對比,進(jìn)行交換,以此內(nèi)推。終止條件是764對比完。至此,我們可以寫出如下希爾函數(shù)的核心部分:

for(i=0;i<n-sp;i++)

?????? for(j=i;j<n-sp;j+=sp)

????????????? if(a[j]>a[j+sp])

????????????? {

???????????????????? t=a[j];a[j]=a[j+sp];a[j+sp]=t;

????????????? }

??? 當(dāng)然,這僅僅是走完了排序的第一趟!要完成真正的排序,還要進(jìn)行循環(huán)!

一、C語言版

1、希爾函數(shù)

void ssort(int a[],int n,int sp) //n為數(shù)據(jù)大小,sp為間隔

{

?????? int i,j,t;

?????? for(i=0;i<n-sp;i++)

?????? for(j=i;j<n-sp;j+=sp)

????????????? if(a[j]>a[j+sp])//如果前面你的大于后面的,則進(jìn)行交換

????????????? {

???????????????????? t=a[j];a[j]=a[j+sp];a[j+sp]=t;

????????????? }

}

? ? ? ? 我們知道,希爾排序一趟是排不出最終結(jié)果的,sp要從大到小,最后取到1才能完成,于是在主調(diào)函數(shù)里要調(diào)用多次ssort函數(shù)(如下面main函數(shù)里的標(biāo)紅部分),于是我們將多個(gè)sp綜合到一個(gè)數(shù)組里,再將這個(gè)數(shù)組套入循環(huán),即可得到一個(gè)新的函數(shù),這樣在主函數(shù)里就可以直接調(diào)用該函數(shù)了,如下:

void shellsort(int a[],int n,int d[],int dn) //dnsp的個(gè)數(shù)

{

?????? int i;

?????? for(i=0;i<dn;i++)

????????????? ssort(a,n,d[i]);

}

2main函數(shù)

main()

{

?????? inta[10]={49,38,65,97,76,13,27,49,55,4},j;

?????? int d[]={5,3,1};

?????? //ssort(a,10,5);

?????? //ssort(a,10,3);

?????? //ssort(a,10,1);

?????? shellsort(a,10,d,3);//一次調(diào)用多個(gè)循環(huán)

?????? for(j=0;j<10;j++)

????????????? printf("%d? ",a[j]); //打印最后排序結(jié)果

?????? printf("%d\n");

}

3. 結(jié)果顯示

二、C#版

1. 構(gòu)造算法類

?

class XiEr {public void ssort(int[] a, int n, int sp){int i, j, t;for (i = 0; i < n - sp; i++)for (j = i; j < n - sp; j += sp)if (a[j] > a[j + sp]){t = a[j]; a[j] = a[j + sp]; a[j + sp] = t;}}public void shellsort(int[] a, int n, int[] d, int dn){int i;for (i = 0; i < dn; i++)ssort(a, n, d[i]);} }

2. 前端調(diào)用

?

?

private void button1_Click(object sender, EventArgs e){int j;int[] a = { 49, 38, 100, 97, 76, 13, 27, 49, 55, 4 };int[] d = { 5, 3, 1 };XiEr xier = new XiEr();xier.shellsort(a, 10, d, 3);listBox1.Items.Clear();string tt = "";for (j = 0; j < 10; j++)tt = tt + a[j].ToString() + '\t';listBox1.Items.Add(tt);}

3. 結(jié)果顯示

?


?

總結(jié)

以上是生活随笔為你收集整理的【经典回放】多种语言系列数据结构算法:希尔排序(C/C#版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。