1演算法學習 線性查詢 選擇排序 插入排序及優化方案

2021-10-18 07:18:47 字數 4271 閱讀 3764

演算法:一系列解決問題的,清晰,可執行的計算機指令

有限性 :在一定的時間執行完成

確定性:不會產生二義性

可行性;這個演算法是可以的

輸入輸出

舉例:比如一道菜,如何做這道菜,做這道菜的過程就是演算法

舉例:如何在一堆試卷中,找到自己的試卷

* @description: 線性查詢法

* @author: qsong

* @create: 2021-01-27 15:19

* @version 1.0

**/public

class

linearsearch

public

static

void

main

(string[

] args)

;int i = linearsearch.

search

(data,16)

; system.out.

println

(i);

}/**

* @author qsong

* @description

* @date 下午3:22 2021/1/27

* @param

* @return

** // 輸入 陣列和目標元素

* //輸出 目標元素鎖在的索引;若不存在,返回-1

**/public

static

intsearch

(int

data,

int target )

}return-1;}}

使用范型改造線性查詢演算法,適應所有型別:

注意:范型不可以是基本的資料型別,只能是類物件

public

class

linearsearch

public

static

void

main

(string[

] args)

;int i = linearsearch.

search

(data,16)

; system.out.

println

(i);

}/**

* @author qsong

* @description

* @date 下午3:22 2021/1/27

* @param

* @return

** // 輸入 陣列和目標元素

* //輸出 目標元素鎖在的索引;若不存在,返回-1

**/public

static

intsearch

(e data,e target )

}return-1;}}

排序演算法:讓資料有序

3.1 選擇排序法

先把小的拿出來

剩下的,再把小的拿出來,排到上乙個小的後面

剩下的,再把小的拿出來,排到上乙個小的後面

每次選擇還沒處理的元素裡最小的元素。

舉例:乙個陣列中存在 6 4 2 3 1 5,對它進行排序,

先拿出1,然後剩下 6 4 2 3 5

再拿出2,就變成1,2 ,然後剩下 6 4 3 5

再拿出3 ,就變成1,2,3 ,然後剩下 6 4 5

。。。。。以此類推

這種選擇排序其實是開闢了乙個新的空間,可否原地完成呢?

/**

* @classname selectionsortingmethod

* @description: 選擇排序法

* @author: qsong

* @create: 2021-01-28 11:30

* @version 1.0

**/public

class

selectionsort

; selectionsort.

sort

(data)

;for

(integer result : data)

}/**

* @author qsong

* @description

* @date 上午11:31 2021/1/28

* @param

* @return

**/public

static

comparable

>

void

sort

(e data)}}

}}

注意:e范型需要繼承comparable這個介面,才能進行比較

3.2 插入排序法

把第乙個元素和第二個元素進行比較,小的放在前面,大的放在後面,如何前面沒有數,開始下一位的比較

第二位和第三位進行比較,如果第三位比第二位小,第三位往前移,第三位再跟第一位進行比較,大的放在後面,小的往前移

以此類推。。。。。

注意:選擇排序和插入排序很類似,但是選擇排序,排序一段時間後,前面幾位一定是最小的幾位,但是插入排序並不是

/**

* @classname insertionsort

* @description: 插入排序法

* @author: qsong

* @create: 2021-01-29 11:17

* @version 1.0

**/public

class

insertionsort

public

static

void

main

(string[

] args)

throws exception

; insertionsort.

sort

(data)

;for

(integer result : data)

system.out.

println()

; system.out.

println

("-------------------------------");

sortinghelper.

sorttest

("insertionsort"

,arraygenerator.

generatorrandomarray

(100

,10000))

;}/** * @author qsong

* @description 插入排序法

* @date 上午11:18 2021/1/29

* @param

* @return

**/public

static

comparable

>

void

sort

(e data)

else}}

}}

優化:

/**

* @author qsong

* @description 插入排序法3

* @date 上午11:18 2021/1/29

* @param

* @return

**/public

static

comparable

>

void sort3 (e[

] data)

data[j]

=params;

}}

倒序:

/**

* @author qsong

* @description 優化後的插入排序法

* @date 上午11:18 2021/1/29

* @param

* @return

**/public

static

comparable

>

void sort4 (e[

] data)

data[j]

=params;

}}

演算法學習筆記 1 插入排序

演算法學習第一站 插入排序 插入排序是演算法學習的第一站,簡單來講就是遍歷陣列,將數插入到比它小的數後面,而之前已經排序過的陣列中比此數大的部分向後移一位 問題 將給定的 n 個數從小到大輸出,數之間空格隔開,行末換行且無空格。include using namespace std intmain ...

插入排序演算法學習

插入排序就如同手裡放了一堆紙牌,把紙牌從左到右進行排序。insert sort a for j 2 to n n為陣列a的長度 do key a j insert a j into the sorted sequence a 1.j 1 i j 1 while i 0 and a i key do ...

演算法學習 插入排序

插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入 實現 public static void insertsort int array if array.length 0 r...