冒泡、選擇、插入、排序算法,二分查找的學習和總結

大綱:很早之前就知道冒泡、選擇、插入,二分查找法卻沒有詳細的研究過他們之間的區別,今天就靜下來,將它們好好總結一下,按照自己的理解和想法,將它們的原理寫出來,加深下自己的印象。

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

package wjwei;

public class bubbleSort {

/**

* @param args

*/

//定義排序的數組

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

//定義temp用于交換時充當中間元素

static float temp=0;

public static void main(String[] args) {

//外層循環,拿著數組中的元素和其它元素逐個比較

for(int i=0;i

/*內層循環,就是將0元素的值拿著和1元素的比較,0元素值大于1元素就交換0和1的值,不大于就開始循環j++比較1元素值和2元素的值,循環,直到達到了arr.length(),結束內層循環,此時就將數組中最大的數放在了最高位置。然后開始外層循環i++,開始第二圈的內層循環,比較出除了最大值之外的最大值,這句話的原因是因為第一圈時候已經把最大值得到放在它的正確位置,所以以后也不用再比較它了,這就是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");

}

}

}

總結:冒泡排序就是將未排序的元素之間逐個比較并逐個的交換位置。詳細介紹和總結完冒泡排序,下面就是選擇排序了,

詳細介紹和總結完冒泡排序,下面就是選擇排序了

2、選擇排序:選擇排序是冒泡排序的升級。它和冒泡相比,交換的次數減少了,但是比較的次數還是一樣的。

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

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;

//外層循環,比較并交換位置

for(int i=0;i

//定義min用于接收數組中的最小值

int min=arr[i];

//定義minid接收最小值的小標

int minid=i;

//內層循環,找出為比較數組中的最小的下標

for(int j=i+1;j

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

min=arr[j];

minid=j;

}

}

/*交換最小值的位置備注:從這里可以看出和冒泡的區別,冒泡是在內層循環的時候進行位置的交換,而選擇排序,則是先選出最小值,在外層循環進行位置交換,這樣就可與節省下了內層循環時的交換次數。*/

temp=arr[i];

arr[i]=arr[minid];

arr[minid]=temp;

}

for(int k=0;k

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

}

}

}

總結:選擇排序相比冒泡效率高了,減少了交換位置的次數。

3、插入排序:是將所插入的元素,插入已經有一定順序的數組中。

插入原理:1、首先要定義一個標記的元素,好進行判斷要往哪里插入;2、要和標記元素進行比較,看插在標記元素的哪邊。3、如果是右邊就直接插入,如果是左邊則需要和標記位的左邊的每一位進行比較,找尋插入的位置。

下面看代碼以及詳細解釋:

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循環,從下標1開始遍歷數組,進行插入

for(int i=1;i

//定義插入的數據元素

int charu=arr[i];

//定義標記位置,也就是插入的位置

int yuan=i-1;

/*判斷,如果標記位置大于等于0并且插入的數據元素小于標記的元素則進入循環將標記數據往右移,然后對標記位置進行--操作,使要插入的數據與標記左側各個數據相比,滿足循環的條件就進行右移操作,不滿足循環的條件就跳出循環得到自己的位置。*/

while(yuan>=0&&charu

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

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

//讓yuan向前一位

yuan--;

}

//不滿足比標記元素小,也不滿足標記位置大于0就將插入的元素放在標記位置的右邊

arr[yuan+1]=charu;

}

//輸出最后結果

for(int i=0;i

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

}

}

}

總結:插入排序,前期比較次數較少,相比較冒泡每次都要比較每次都要交換,和選擇排序的每次都要比較全部的元素相比,它速度要快。

小結:前面都是簡單排序的方式。

4,、二分查找:二分查找是很常見而且高效的查找方式,比普通查找速度快的多。普通查找:遍歷數組和查詢值進行比較;

二分查找:定義中間值和所查找值進行比較,小于中間值就查找中間值左邊的值,大于則相反。所以,二分查找要滿足被? ? ? ? ? ? ? ? ? ? ? ? 查的數組是有序排列的。下面代碼分別是普通查找,二分查找和遞歸實現的二分查找。

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])

//使用遞歸算法自身調用自身

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

else

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

}

return -1;

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容

  • 總結一下常見的排序算法。 排序分內排序和外排序。內排序:指在排序期間數據對象全部存放在內存的排序。外排序:指在排序...
    jiangliang閱讀 1,362評論 0 1
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,762評論 0 33
  • 查找和排序都是程序設計中經常用到的算法。查找相對而言較為簡單,不外乎順序查找、二分查找、哈希表查找和二叉排序樹查找...
    eagleRock閱讀 5,591評論 0 14
  • 某次二面時,面試官問起Js排序問題,吾絞盡腦汁回答了幾種,深感算法有很大的問題,所以總計一下! 排序算法說明 (1...
    流浪的先知閱讀 1,201評論 0 4
  • 孤獨是一個人的狂歡,狂歡是一群人的孤獨。昏暗的房間一縷夕陽投了進來,他坐在窗前望著路上行人,他們疲憊的臉上洋溢著笑...
    酸梅泡菜君閱讀 244評論 0 0