1. 程式人生 > >java實現經典演算法

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實現堆排