您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java希爾排序方法怎么使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java希爾排序方法怎么使用”吧!
用希爾排序法對一組數(shù)據(jù)由小到大進行排序,數(shù)據(jù)分別為69、56、12、136、3、55、46、99、88、25。
希爾排序的全過程如下:
代碼實現(xiàn):
/*第九天、希爾排序*/#include <stdio.h>#include <stdlib.h>/*****************************************************************************************希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序算法的一種更高效 **的改進版本。希爾排序是非穩(wěn)定排序算法。該方法因DL.Shell于1959年提出而得名。 **希爾排序是把記錄按下標(biāo)的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少 **每組包含的關(guān)鍵詞越來越多,當(dāng)增量減至1時,整個文件恰被分成一組,算法便終止。 ******************************************************************************************/ /******************************************* *函數(shù)名稱:Shsort *參數(shù)說明:pDataArray 無序數(shù)組指針* iDataNum 無序數(shù)據(jù)個數(shù) *說明: 希爾排序 ********************************************/ void Shsort(int* pDataArray,int iDateNumn) { int i,j,d; d = iDateNumn / 2; /*確定固定增量值,設(shè)為數(shù)組長度的一半*/ while(d >= 1) /*增量等于1退出循環(huán)*/ { for(i = d;i < iDateNumn;i++) /*數(shù)組下標(biāo)從d開始進行直接插入排序*/ { /*也就是數(shù)組的第d+1個元素*/ int temp = pDataArray[i]; /*設(shè)置監(jiān)視哨,元素最右邊的位置*/ j = i - d; /*確定要進行比較的元素的最左邊位置*/ while((j >= 0) && (temp < pDataArray[j])) /*從后向前,找到比其小的數(shù)的位置*/ { pDataArray[j + d] = pDataArray[j]; /*數(shù)據(jù)右移*/ j -= d; /*向左移動d個位置*/ } if (j != i - d) /*存在比其小的數(shù)*/ pDataArray[j + d] = temp; /*在確定的位置插入pDataArray[i]*/ } d = d / 2; }} /******************************************* *函數(shù)名稱:main *參數(shù)說明:無 *說明: 主函數(shù) ********************************************/ void main(void) { int pDataArray[10],i; printf("請輸入10個數(shù)據(jù):\n"); for(i = 0;i < 10;i++) scanf("%d",&pDataArray[i]); Shsort(pDataArray,10); printf("排序后的順序是:\n"); for(i = 0;i < 10;i++) printf("%5d",pDataArray[i]); printf("\n"); system("pause");}
結(jié)果顯示:
感謝各位的閱讀,以上就是“Java希爾排序方法怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java希爾排序方法怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。