冒泡掰读、選擇、插入叭莫、排序算法蹈集,二分查找的學(xué)習(xí)和總結(jié)

大綱:很早之前就知道冒泡、選擇雇初、插入拢肆,二分查找法卻沒有詳細(xì)的研究過他們之間的區(qū)別,今天就靜下來靖诗,將它們好好總結(jié)一下郭怪,按照自己的理解和想法,將它們的原理寫出來刊橘,加深下自己的印象鄙才。

1:冒泡排序:原理:冒泡顧名思義,就像氣泡從水底冒出一樣促绵,它的排序方式是:研究了一下攒庵,它給人的感覺是像近視眼一樣,它只能看見自己和緊挨著自己的下一個數(shù)字败晴,所以它的排序方式也就是將比較元素和緊挨著自己的元素比較看是否交換位置浓冒,然后持續(xù)這個過程,比較的一直都是緊挨著的兩個元素位衩。下面看代碼吧裆蒸,再代碼里面再詳細(xì)解釋。

package wjwei;

public class bubbleSort {

/**

* @param args

*/

//定義排序的數(shù)組

static float arr[]={3.5f,4.5f,4,2,7,1};

//定義temp用于交換時充當(dāng)中間元素

static float temp=0;

public static void main(String[] args) {

//外層循環(huán)糖驴,拿著數(shù)組中的元素和其它元素逐個比較

for(int i=0;i

/*內(nèi)層循環(huán)僚祷,就是將0元素的值拿著和1元素的比較,0元素值大于1元素就交換0和1的值贮缕,不大于就開始循環(huán)j++比較1元素值和2元素的值辙谜,循環(huán),直到達(dá)到了arr.length(),結(jié)束內(nèi)層循環(huán)感昼,此時就將數(shù)組中最大的數(shù)放在了最高位置装哆。然后開始外層循環(huán)i++,開始第二圈的內(nèi)層循環(huán),比較出除了最大值之外的最大值,這句話的原因是因?yàn)榈谝蝗r候已經(jīng)把最大值得到放在它的正確位置蜕琴,所以以后也不用再比較它了萍桌,這就是i

for(int j=0;j

if(arr[j]>arr[j+1]){

//換位

temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

for(int k=0;k

System.out.print(arr[k]+"\t");

}

}

}

總結(jié):冒泡排序就是將未排序的元素之間逐個比較并逐個的交換位置。詳細(xì)介紹和總結(jié)完冒泡排序凌简,下面就是選擇排序了上炎,

詳細(xì)介紹和總結(jié)完冒泡排序唇礁,下面就是選擇排序了

2扎谎、選擇排序:選擇排序是冒泡排序的升級。它和冒泡相比藻茂,交換的次數(shù)減少了凸郑,但是比較的次數(shù)還是一樣的裳食。

原理:選擇實(shí)際就是選出數(shù)組中未排序的最大或者最小值,然后將其放在自己的位置芙沥。下面看代碼:

package wjwei;

public class selectSort {

public static void main(String []args){

int brr[]={4,9,39,13,43,5};

Select select=new Select();

select.sort(brr);

}

}

class Select{

public void sort(int arr[]){

//定義交換變量

int temp=0;

//外層循環(huán)诲祸,比較并交換位置

for(int i=0;i

//定義min用于接收數(shù)組中的最小值

int min=arr[i];

//定義minid接收最小值的小標(biāo)

int minid=i;

//內(nèi)層循環(huán),找出為比較數(shù)組中的最小的下標(biāo)

for(int j=i+1;j

if(arr[i]>arr[j]){

min=arr[j];

minid=j;

}

}

/*交換最小值的位置備注:從這里可以看出和冒泡的區(qū)別憨愉,冒泡是在內(nèi)層循環(huán)的時候進(jìn)行位置的交換烦绳,而選擇排序卿捎,則是先選出最小值配紫,在外層循環(huán)進(jìn)行位置交換,這樣就可與節(jié)省下了內(nèi)層循環(huán)時的交換次數(shù)午阵。*/

temp=arr[i];

arr[i]=arr[minid];

arr[minid]=temp;

}

for(int k=0;k

System.out.print(arr[k]+"\t");

}

}

}

總結(jié):選擇排序相比冒泡效率高了躺孝,減少了交換位置的次數(shù)。

3底桂、插入排序:是將所插入的元素植袍,插入已經(jīng)有一定順序的數(shù)組中。

插入原理:1籽懦、首先要定義一個標(biāo)記的元素于个,好進(jìn)行判斷要往哪里插入;2暮顺、要和標(biāo)記元素進(jìn)行比較厅篓,看插在標(biāo)記元素的哪邊。3捶码、如果是右邊就直接插入羽氮,如果是左邊則需要和標(biāo)記位的左邊的每一位進(jìn)行比較,找尋插入的位置惫恼。

下面看代碼以及詳細(xì)解釋:

package wjwei;

public class charu {

public static void main(String[] args) {

// TODO Auto-generated method stub

int arr[]={3,1,-4,9,-8,5,-3,7,0,3,5,56,45};

Insert insert=new Insert();

insert.sort(arr);

}

}

class Insert{

public void sort(int arr[]){

//for循環(huán)档押,從下標(biāo)1開始遍歷數(shù)組,進(jìn)行插入

for(int i=1;i

//定義插入的數(shù)據(jù)元素

int charu=arr[i];

//定義標(biāo)記位置,也就是插入的位置

int yuan=i-1;

/*判斷令宿,如果標(biāo)記位置大于等于0并且插入的數(shù)據(jù)元素小于標(biāo)記的元素則進(jìn)入循環(huán)將標(biāo)記數(shù)據(jù)往右移叼耙,然后對標(biāo)記位置進(jìn)行--操作,使要插入的數(shù)據(jù)與標(biāo)記左側(cè)各個數(shù)據(jù)相比粒没,滿足循環(huán)的條件就進(jìn)行右移操作旬蟋,不滿足循環(huán)的條件就跳出循環(huán)得到自己的位置。*/

while(yuan>=0&&charu

//把前面存在的那個數(shù)的數(shù)向后移動一位

arr[yuan+1]=arr[yuan];

//讓yuan向前一位

yuan--;

}

//不滿足比標(biāo)記元素小革娄,也不滿足標(biāo)記位置大于0就將插入的元素放在標(biāo)記位置的右邊

arr[yuan+1]=charu;

}

//輸出最后結(jié)果

for(int i=0;i

System.out.print(arr[i]+"\t");

}

}

}

總結(jié):插入排序倾贰,前期比較次數(shù)較少,相比較冒泡每次都要比較每次都要交換拦惋,和選擇排序的每次都要比較全部的元素相比匆浙,它速度要快。

小結(jié):前面都是簡單排序的方式厕妖。

4,首尼、二分查找:二分查找是很常見而且高效的查找方式,比普通查找速度快的多言秸。普通查找:遍歷數(shù)組和查詢值進(jìn)行比較软能;

二分查找:定義中間值和所查找值進(jìn)行比較,小于中間值就查找中間值左邊的值举畸,大于則相反查排。所以,二分查找要滿足被? ? ? ? ? ? ? ? ? ? ? ? 查的數(shù)組是有序排列的抄沮。下面代碼分別是普通查找跋核,二分查找和遞歸實(shí)現(xiàn)的二分查找。

package boke2;

import java.util.Arrays;

public class Dichotomy {

/**

* 普通查找和二分查找法

*/

public static void main(String[] args) {

int[] num = { 15, 34, 36, 45, 52, 63 };

Arrays.sort(num);

int n = 45;

// int j = findNum(num,n);

// int j = DichotomybyCommon(num, n);

int j = Dichotomybydigui(num, 0, num.length, n);

System.out.println(j);

}

// 普通查找法

public static int findNum(int[] num, int n) {

for (int i = 0; i < num.length; i++) {

if (num[i] == n)

return i;

}

return 0;

}

// 普通二分查找

@SuppressWarnings("unused")

private static int DichotomybyCommon(int[] num, int n) {

int left, right, among;

left = 0;

right = num.length - 1;

while (left <= right) {

among = (left + right) / 2;

if (num[among] == n)

return among;

else if (n < num[among])

right = among - 1;

else

left = among + 1;

}

return -1;

}

// 遞歸二分查找

private static int Dichotomybydigui(int[] num, int left, int right,

int keyNum) {

int among = (left + right) / 2;

if (left <= right) {

if (num[among] == keyNum)

return among;

else if (keyNum < num[among])

//使用遞歸算法自身調(diào)用自身

return Dichotomybydigui(num, left, among - 1, keyNum);

else

return Dichotomybydigui(num, among + 1, right, keyNum);

}

return -1;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叛买,一起剝皮案震驚了整個濱河市砂代,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌率挣,老刑警劉巖刻伊,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椒功,居然都是意外死亡捶箱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門蛾茉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼呢,“玉大人,你說我怎么就攤上這事谦炬≡闷粒” “怎么了节沦?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長础爬。 經(jīng)常有香客問我甫贯,道長,這世上最難降的妖魔是什么看蚜? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任叫搁,我火速辦了婚禮,結(jié)果婚禮上供炎,老公的妹妹穿的比我還像新娘渴逻。我一直安慰自己,他們只是感情好音诫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布惨奕。 她就那樣靜靜地躺著,像睡著了一般竭钝。 火紅的嫁衣襯著肌膚如雪梨撞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天香罐,我揣著相機(jī)與錄音卧波,去河邊找鬼。 笑死庇茫,一個胖子當(dāng)著我的面吹牛港粱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播港令,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼啥容,長吁一口氣:“原來是場噩夢啊……” “哼锈颗!你這毒婦竟也來了顷霹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤击吱,失蹤者是張志新(化名)和其女友劉穎淋淀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體覆醇,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡朵纷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了永脓。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袍辞。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖常摧,靈堂內(nèi)的尸體忽然破棺而出搅吁,到底是詐尸還是另有隱情威创,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布谎懦,位于F島的核電站肚豺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏界拦。R本人自食惡果不足惜吸申,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望享甸。 院中可真熱鬧截碴,春花似錦、人聲如沸蛉威。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓷翻。三九已至聚凹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間齐帚,已是汗流浹背妒牙。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留对妄,地道東北人湘今。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像剪菱,于是被迫代替她去往敵國和親摩瞎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 總結(jié)一下常見的排序算法孝常。 排序分內(nèi)排序和外排序旗们。內(nèi)排序:指在排序期間數(shù)據(jù)對象全部存放在內(nèi)存的排序。外排序:指在排序...
    jiangliang閱讀 1,326評論 0 1
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)构灸。 張土汪:刷leetcod...
    土汪閱讀 12,724評論 0 33
  • 查找和排序都是程序設(shè)計中經(jīng)常用到的算法上渴。查找相對而言較為簡單,不外乎順序查找喜颁、二分查找稠氮、哈希表查找和二叉排序樹查找...
    eagleRock閱讀 5,561評論 0 14
  • 某次二面時,面試官問起Js排序問題半开,吾絞盡腦汁回答了幾種隔披,深感算法有很大的問題,所以總計一下寂拆! 排序算法說明 (1...
    流浪的先知閱讀 1,187評論 0 4
  • 孤獨(dú)是一個人的狂歡,狂歡是一群人的孤獨(dú)奢米〗嫣浚昏暗的房間一縷夕陽投了進(jìn)來,他坐在窗前望著路上行人恃慧,他們疲憊的臉上洋溢著笑...
    酸梅泡菜君閱讀 238評論 0 0