演算法:一系列解決問題的,清晰,可執行的計算機指令
有限性 :在一定的時間執行完成
確定性:不會產生二義性
可行性;這個演算法是可以的
輸入輸出
舉例:比如一道菜,如何做這道菜,做這道菜的過程就是演算法
舉例:如何在一堆試卷中,找到自己的試卷
* @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...