java實現經典演算法
氣泡排序
/**
*氣泡排序
*比較相鄰的兩個元素,如果第一個比第二個大則將兩個交換順序
*i<numbers.length 控制排序輪數 一般為陣列長度減1次,因為最後一次迴圈只剩下一個數組元素,不需要對比,同時陣列已經完成排序了
*j<numbers.length-i 因為經過一個排序後,最大(或最小)的元素都已經放到了陣列的最後一位,下次不用再進行比較。所以長度改變
*/
public void bubbleSort(int[] numbers){
for(int i=1;i<numbers.length;i++){
for(int j=0;j<numbers.length-i;j++){
if (numbers[j]>numbers[j+1]){
int temp=numbers[j];
numbers[j]=numbers[j+1];
numbers[j+1]=temp;
}
}
}
}
直接選擇排序
屬於選擇排序的一種,排序速度比氣泡排序快,也是最常用的
/**
* 由於交換位置放在了第一層迴圈裡面,所以速度會比冒泡(放在了第二層迴圈中)快
*/
public void selectSort(int[] array){
//作為最大值(或最小)的下標
int index;
for(int i=1;i<array.length;i++){
//預設第一個最大(或最小)
index=0;
for(int j=1;j<array.length-i;j++){
//取最大值的下標
if(array[j]>array[index]){
index=j;
}
}
//在上面的for迴圈中找到了最大(最小)值的下標
//交換位置
//一次迴圈都會將一個最值放到最後,所以長度逐次遞減
int temp=array[array.length-i];
array[array.length-i]=array[index];
array[index]=temp;
}
}
反轉排序
以相反的順序把原有陣列的內容重新排序
/**
*基本思想:將陣列的最後一個元素與第一個元素替換,倒數第二個元素與第二個元素替換
*/
public void ReverseSort(int[] array){
for(int i=0;i<array.length/2;i++){
int temp=array[i];
array[i]=array[array.length-1-i];
array[array.length-1-i]=temp;
}
}
費氏數列
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第四個月後每個月又生一對兔子,假如兔子都不死,問第n個月的兔子數量為多少?
分析:兔子的數量規律為:1,1,2,3,5,8,13,21….
當n>=3時,fn=f(n-1)+f(n-2); n為下標
java實現:
public int getCount(int N){
if(N==1||N==2){
return 1;
}else {
return getCount(N-1)+getCount(N-2);
}
}
判斷素數個數並輸出
素數:除了1和它本身以外不再有其他因數
判斷N到M直接素數的個數,並輸出(N < M)
/**
* 兩次迴圈
*第一次迴圈是n到m,取每個數
*第二個迴圈是判斷這個數是不是素數
*/
public void judgePrimeNumber(int N;int M){
int count=0;
for(int i=N;i<=M;i++){
boolean flag=true;
//從2到自身-1,如果有因數,則退出判斷
for(int j=2;j<i;j++){
if(i%j==0){
flag=flase;
break;
}
}
//判斷這個數是不是素數,如果是則數量加1並列印
if(flag==true){
count+=1;
System.out.print(i+" ");
}
}
System.out.println("從"+N+"到"+M+"有"+count+"個素數");
}
列印圖形類
菱形:
*
***
*****
*******
*****
***
*
java實現:
/**
*主要分兩部分實現,上三角形和下三角形
*上三角形規律:空格數逐層減1,* 逐層加2
*下三角規律:空格數加1;* 逐層減3
*/
public void lingxing(){
//控制上三角的迴圈
for(int i=1;i<=4;i++){
//列印空白
for(int k=1;k<=4-i;k++){
System.out.print(" ");
}
//列印 *
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
//換行
System.out.print();
}
//下三角
for(i=3;i>=1;i--){
for(int k=1;k<= 4-i;k++){
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
}
列印三角形
*
***
******
********
******
***
*
程式碼是菱形去掉列印空格的部分
相關推薦
java實現經典演算法
氣泡排序 /** *氣泡排序 *比較相鄰的兩個元素,如果第一個比第二個大則將兩個交換順序 *i<numbers.length 控制排序輪數 一般為陣列長度減1次,因為最後一次迴圈只剩下一個數組元素,不需要對比,同時陣列已經完成排序了 *j<nu
Java實現經典排序演算法及複雜度穩定性分析
/* 氣泡排序 */ public static int[] bubbleSort(int[] arry) { for (int i = 0; i < arry.length; i++) {
java實現權重演算法
一、簡單介紹 如有4個元素A、B、C、D,權重分別為1、2、3、4,隨機結果中A:B:C:D的比例要為1:2:3:4。 總體思路:累加每個元素的權重A(1)-B(3)-C(6)-D(10),則4個元素的的權重管轄區間分別為[0,1)、[1,3)、[3,6)、[6,10)。然後隨機出一個[0
一個用Java實現密碼演算法,使用socket引發的血案
public static void main(String[] args) throws IOException, ParseException { ServerSocket serverSocket = new ServerSocket(1
Java實現MD5演算法過程,並利用自帶MD5函式進行對比校驗
文章目錄 一、環境說明 二、演算法原理概述 三、程式設計 資料結構 重要模組步驟 四、執行結果 一、環境說明 作業系統:window10 程式語言:Java (J
LeetCode 239. 滑動視窗最大值 java實現 個人演算法之旅筆記
239. 滑動視窗最大值 給定一個數組 nums,有一個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗 k 內的數字。滑動視窗每次只向右移動一位。 返回滑動視窗最大值。 示例: 輸入: nums = [1,3,-1,-3,5,3,6,7
希爾排序(java實現)演算法詳解
希爾排序也是一種插入排序演算法,也叫作縮小增量排序,是直接插入排序的一種更高效的改進演算法。 希爾排序因其設計者希爾(Donald Shell)的名字而得名,該演算法在 1959 年被公佈。一些老版本的教科書和參考手冊把該演算法命名為 Shell-Metzner,包含了 Marlene Metzner No
java實現排序演算法之歸併排序(2路歸併)
歸併排序:“歸併”的含義就是將兩個或兩個以上的有序表合併成一個新的有序表,假定待排序表含有n個記錄,則可以看成是n個有序的子表,每個子表的長度為1,然後兩兩歸併,得到n/2個長度為2或1的有序表,然後在兩兩歸併,如此重複,直到合併成一個長度為n的有序表為止,這就是2路歸併
JAVA實現遺傳演算法
個人部落格站已經上線了,網址 www.llwjy.com ~歡迎各位吐槽~ -------------------------------------------------------------------------------------------------
Java實現DFA演算法對敏感詞、廣告詞過濾功能
一、前言 開發中經常要處理使用者一些文字的提交,所以涉及到了敏感詞過濾的功能,參考資料中DFA有窮狀態機演算法的實現,建立有向圖。完成了對敏感詞、廣告詞的過濾,而且效率較好,所以分享一下。 具體實現: 1、匹配大小寫過濾 2、匹配全形半形過濾 3、匹配過濾停頓詞過濾。
營救公主(Java實現A*演算法解決迷宮問題)
很早就聽說過A*演算法,據說在尋路徑時,是一種比較高效的演算法。但是一直沒有搞清楚原理。 這段時間剛好有個營救公主的例子: 題描述 : 公主被魔王抓走了 , 王子需要拯救出美麗的公主 。 他進入了魔王的城 堡 , 魔王的城堡是一座很大的迷宮 。 為了使問題簡單化 , 我們假設這個迷宮是
JAVA之——經典演算法50題
/******************************************************************************** @author liuyazhuang <[email protected]>******
大數乘法[JAVA實現]-經典筆試題
大數乘法 基本思想: 輸入字串,轉成char陣列,轉成int陣列。採用分治思想,每一位的相乘; * 公式:AB*CD = AC (BC+AD) BD * 然後從後到前滿十進位,順序如右(B
Java實現k_means演算法進行聚類分析
實驗描述: 對指定資料集進行聚類分析,選擇適當的聚類演算法,編寫程式實現,提交程式和結果報告。 資料集: Iris Data Set(見附件一) ,根據花的屬性進行聚類。 資料包括四個屬性:sepal length花萼長度,sepal width花萼寬度,petal len
java實現冒泡演算法
package interviewtest; import java.util.Random; public class pop { public static void main(String args[]) { int array[] = new int[10];
java一些經典演算法題
寫在開頭:幾道java演算法題,自己的思路,不對的地方望指正。用的都是最基本的方法,一起加油 ·1 *求1!+2!+3!.....+30!的和 並用方法。 int a=1,b=30;qiuhe(a, b);*/ public class d501 {public sta
java 實現掃雷演算法
小時候接觸掃雷,完了好久都沒有弄明白,最近再次接觸掃雷才明白了玩法。 規則:找出一定數量的雷整個遊戲才會結束。點選方格,是數字n的話,就表明這個方格的周圍8個方格中一共有n個雷。 演算法: (1)假設一局中有10個雷,方格大小是n*m,用陣列map[n
Java實現排序演算法之氣泡排序
氣泡排序的思想:將帶排序的序列兩兩進行比較,較大的一個“冒泡”,“冒泡”即如果下標為A 與B的資料比較,A 大則與B交換位置,否則就不交換位置,交換位置後,此時B的位置程式設計A,B 的下一個位置是B,兩者在進行比較,每進行一輪排序,總是較大的數排在剩下序列的最高位,也因此為
演算法java實現--貪心演算法--最小生成樹問題--Kruskal演算法
最小生成樹問題(Kruskal演算法)的java實現(貪心演算法) 具體問題描述以及C/C++實現參見網址 http://blog.csdn.net/liufeng_king/article/details/8738161 import java.util.Colle
Java實現排序演算法之快速排序
一、綜述 快速排序是交換排序中的一種,平均演算法複雜度是O(nlogn),最壞O(n*n)。下面用Java實現一個快速排序,並用註釋的方式解釋了思想和原理。 二、Java實現堆排