JAVA鍥涚鍩烘湰鎺掑簭,鍖呮嫭鍐掓場娉?鎻掑叆娉?閫夋嫨娉?SHELL鎺掑簭娉?鍏朵腑閫夋嫨娉曟槸鍐掓場娉曠殑鏀硅繘,SHELL鎺掑簭娉曟槸 鎻掑叆娉曠殑鏀硅繘.鎵浠ヤ粠鏍規湰涓婃潵璇村彲浠ュ綊綰充負涓ょ涓嶅悓鐨勬帓搴忔柟娉?鍗?鎻掑叆娉曪紗鍐掓場娉? 涓 鎻掑叆娉? 閬嶅巻鎺掑簭闆嗗悎錛屾瘡鍒頒竴涓厓绱犳椂錛岄兘瑕佸皢榪欎釜鍏冪礌涓庢墍鏈夊畠涔嬪墠鐨勫厓绱犻亶鍘嗘瘮杈冧竴閬嶏紝璁╃鍚堟帓搴忛『搴忕殑鍏冪礌鎸ㄤ釜縐誨姩鍒板綋鍓嶈寖鍥村唴瀹冩渶搴旇鍑虹幇鐨勪綅緗備氦鎹㈡槸鐩擱偦閬嶅巻縐誨姩錛屽弻閲嶅驚鐜帶鍒跺疄鐜?榪欑鎺掑簭娉曞睘浜庡湴澶磋泧綾誨瀷,鍦ㄦ垜鐨勫湴鐗屼笂鎴戣鎶婃墍鏈夌殑涓滆タ鎸変竴瀹氱殑欏哄簭瑙勬暣,榪囨潵涓涓?瑙勬暣涓涓? 澶勭悊浠g爜濡備笅:
浜屽啋娉℃硶: 姣旇緝瀹規槗錛屽畠鐨勫唴灞傚驚鐜繚璇侀亶鍘嗕竴嬈″悗錛岄泦鍚堜腑鏈灝忥紙澶э級鍏冪礌鍑虹幇鍦ㄥ畠鐨勬紜綅緗紝涓嬩竴嬈″氨鏄灝忓厓绱犮傘傘傝鏂規硶鍦ㄩ泦鍚堝垎甯冪殑鍚勭鎯呭喌涓嬩氦鎹㈢Щ鍔ㄧ殑嬈℃暟鍩烘湰涓嶅彉錛屽睘浜庢渶鎱㈢殑涓縐嶆帓搴忋傚疄鐜頒篃鏄弻閲嶅驚鐜帶鍒躲傝繖縐嶆帓搴忔硶灞炰簬榪囨睙榫?灝辨槸瑕佹壘鍒版瀬绔?浣嗘槸榪囧榫欎篃鏈夊ぇ鍝?浜屽摜絳?鎵浠ヤ粬浠彧鑳芥槸澶у摜鎸戜簡浜屽摜鎸? 澶勭悊浠g爜濡備笅:
涓夐夋嫨娉? 璇ユ柟娉曞彧鏄氳繃閬嶅巻闆嗗悎璁板綍鏈灝忥紙澶э級鍏冪礌鐨勪綅緗紝涓嬈¢亶鍘嗗畬鍚庯紝鍐嶈繘琛屼氦鎹綅緗搷浣滐紝綾諱技鍐掓場錛屼絾鍦ㄦ瘮杈冭繃紼嬩腑錛屼笉榪涜浜ゆ崲鎿嶄綔錛屽彧璁板綍鍏冪礌浣嶇疆銆備竴嬈¢亶鍘嗗彧榪涜涓嬈′氦鎹㈡搷浣溿傝繖涓涓庝氦鎹㈡搴忔瘮杈冭垂鏃剁殑鍏冪礌姣旇緝閫傚悎銆傝繖縐嶆帓搴忔硶姣斿啋娉℃硶瑕佸煄搴滆娣辯殑澶?鎴戝厛璁頒綇鏋佺鏁版嵁,寰呴亶鍘嗘暟鎹畬浜嗕箣鍚?鎴戝啀澶勭悊,涓嶅儚鍐掓場娉曢偅鏍峰彧瑕佹瘮鑷繁鏋佺涓鐐圭殑灝辮澶勭悊,閫夋嫨娉曞彧澶勭悊鏈韓鑼冨洿鍐呯殑鏈鏋佺鏁版嵁.
鍥?Shell鎺掑簭錛? 瀹冩槸瀵規彃鍏ユ帓搴忕殑涓縐嶆敼榪涳紝鏄冭檻灝嗛泦鍚堝厓绱犳寜鐓т竴瀹氱殑鍩烘暟鍒掑垎鎴愮粍鍘繪帓搴忥紝璁╂瘡涓緇勫湪灞閮ㄨ寖鍥村唴鍏堟帓鎴愬熀鏈湁搴忥紝鏈鍚庡湪榪涜涓嬈℃墍鏈夊厓绱犵殑鎻掑叆鎺掑簭銆?
|
鍐掓場鎺掑簭錛氬涓涓槦鍒楅噷鐨勬暟鎹紝鎸ㄤ釜榪涜杞鍜屼氦鎹紝姣忔杞鍑轟竴涓綋鍓嶆渶澶ф垨鑰呮渶灝忕殑鍊兼斁鍦ㄩ槦灝撅紝鐒跺悗緇х畫涓嬫杞錛岃疆璇㈤暱搴?1錛屽氨璺熷啋娉′竴鏍鳳紝鎵浠ョО涓哄啋娉℃帓搴忥紝榪愮畻鏃墮棿澶嶆潅搴騫蟲柟
閫夋嫨鎺掑簭錛氬涓涓槦鍒楅噷鐨勬暟鎹紝閫夊嚭褰撳墠鏈澶ф垨鑰呮渶灝忕殑鍊鹼紝鐒跺悗灝嗕粬涓庨槦棣栫殑鏁版嵁浜ゆ崲錛岀劧鍚庝粠絎簩涓紑濮嬶紝榪涜鐩稿悓鐨勬搷浣滐紝榪愮畻鏃墮棿澶嶆潅搴騫蟲柟錛屼絾鐢變簬浠栦笉鍍忓啋娉′竴鏍烽渶瑕佷笉鍋滅殑浜ゆ崲浣嶇疆錛屾墍浠ヤ細姣斿啋娉″揩涓浜?/p>
鎻掑叆鎺掑簭錛氬涓涓槦鍒楅噷鐨勬暟鎹紝浠庣浜屼釜寮濮嬶紝涓庢浣嶇疆涔嬪墠鐨勬暟鎹繘琛屾瘮杈冿紝褰㈡垚灞閮ㄦ湁搴忕殑闃熷垪錛屽驚鐜鎿嶄綔錛岀洿鍒伴槦灝撅紝榪愮畻鏃墮棿澶嶆潅搴︿緷鐒朵負N騫蟲柟錛屼絾浠栫敱浜庝繚璇佷簡灞閮ㄧ殑鏈夊簭鎬э紝鎵浠ユ瘮杈冪殑嬈℃暟浼氭洿灝戜竴浜涳紝鐩稿鍓嶄袱縐嶄細鏇村揩
甯屽皵鎺掑簭錛氬叾瀹炲氨鏄敤姝ラ暱鎺у埗鐨勬彃鍏ユ帓搴忥紝甯屽皵鎺掑簭閫氳繃鍔犲ぇ鎻掑叆鎺掑簭涓厓绱犱箣闂寸殑闂撮殧錛屽茍鍦ㄨ繖浜涙湁闂撮殧鐨勫厓绱犱腑榪涜鎻掑叆鎺掑簭錛屼粠鑰岃鏁版嵁欏瑰彲浠ュぇ騫呭害縐誨姩錛岃繖鏍風殑鏂瑰紡鍙互浣挎瘡嬈$Щ鍔ㄤ箣鍚庣殑鏁版嵁紱諱粬浠湪鏈緇堝簭鍒椾腑鐨勪綅緗浉宸笉澶э紝淇濊瘉鏁版嵁鐨勫熀鏈湁搴忥紝澶уぇ鎻愬崌浜嗘帓搴忛熷害錛岃繍綆楁椂闂村鏉傚害N*logN
蹇熸帓搴忥細瀵逛竴涓槦鍒楋紝浠ヤ粬闃熷熬鐨勬暟鎹負鍩哄噯鍊鹼紝鍏堝垝鍒嗘垚涓ゅ潡鏁版嵁錛屼竴鍧楅兘澶т簬榪欎釜鍊鹼紝涓鍧楀皬浜庤繖涓鹼紝鐒跺悗瀵硅繖涓ゅ潡榪涜鍚屾牱鐨勬搷浣滐紝榪欐槸鏈蹇殑鎺掑簭鏂規硶錛岃繍綆楁椂闂村鏉傚害N*logN
涓嬮潰鏄唬鐮侊細
public static void sort(int[] a)
{
long time1,time2;
int c;
time1=System.currentTimeMillis();
// /*鍐掓場鎺掑簭*/
// for(int i=a.length-1;i>1;i--)
// {
// for(int j=0;j<i;j++)
// {
//
// if(a[j]<a[j+1])
// {
// c=a[j];
// a[j]=a[j+1];
// a[j+1]=c;
// }
// }
// }
// /*閫夋嫨鎺掑簭*/
// int pos=0;
// for(int i=0;i<a.length-2;i++)
// {
// for(int j=i;j<a.length-1;j++)
// {
// if(a[pos]<a[j+1])
// pos=j+1;
// }
// c=a[i];
// a[i]=a[pos];
// a[pos]=c;
// pos=i+1;
// }
// /*鎻掑叆鎺掑簭*/
// for(int i=1;i<a.length;i++)
// {
// c=a[i];
// int m=i-1;
// while(m>=0&&a[m]<c)
// {
// a[m+1]=a[m];
// m--;
// }
// a[m+1]=c;
// }
// /*甯屽皵鎺掑簭*/
// int h=1;
// int m=0;
// while(3*h+1<a.length)
// h=3*h+1;
// while(h>0)
// {
// for(int i=h;i<a.length;i++)
// {
// c=a[i];
// m=i-h;
// while(m>=0&&a[m]<c)
// {
// a[m+h]=a[m];
// m-=h;
// }
// a[m+h]=c;
//
// }
// h=(h-1)/3;
// }
/*蹇熸帓搴?/
provide(a,0,a.length-1);
time2=System.currentTimeMillis();
System.out.println("time:"+(time2-time1));
}
/*閫掑綊璋冪敤鍒掑垎*/
public static void provide(int[] a,int left,int right)
{
try
{
if(right<=left)
return;
else
{
/*璁劇疆鍩哄噯鐐?/
int prov=a[right];
/*鍙栧緱鍒掑垎涓柇鐐?/
int par=partitionIt(a,left,right,prov);
/*瀵瑰垝鍒嗗悗鐨勪袱杈瑰啀嬈″垝鍒?/
provide(a,left,par-1);
provide(a,par+1,right);
}
}
catch(Exception e)
{
System.out.println("eer:"+left+"."+right);
}
}
/*鍒掑垎綆楁硶*/
public static int partitionIt(int[] a,int left,int right,int prov)
{
/*璁劇疆宸﹀彸绔偣鐨勬寚閽?/
int leftP=left-1;
int rightP=right;
int c;//鐢ㄤ簬浜ゆ崲鐨勪腑闂村彉閲?br> /*褰撳乏鍙蟲寚閽堟湭鐩擱亣鏃剁戶緇搷浣?/
while(leftP<rightP)
{
/*褰撳乏鎸囬拡鐨勬暟鎹皬浜庡熀鍑嗗兼椂璺沖嚭*/
while(leftP<a.length-1&&a[++leftP]>prov)
;
/*褰撳彸鎸囬拡鐨勬暟鎹ぇ浜庡熀鍑嗗兼椂璺沖嚭*/
while(rightP>leftP&&a[--rightP]<prov)
;
/*宸﹀彸鎸囬拡閮藉仠涓嬫椂浜ゆ崲鏁版嵁*/
c=a[leftP];
a[leftP]=a[rightP];
a[rightP]=c;
}
/*鍒掑垎緇撴潫錛屽皢鍩哄噯鐐逛笌鎸囬拡鐨勭浉閬囩偣浜ゆ崲*/
c=a[rightP];
a[rightP]=a[right];
a[right]=c;
return leftP;
}