本文目錄一覽:
java中快速排序的算法舉個例子
package person.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* class name: RapidSort
* description: Java快速排序法:數組和集合
* @author Jr
*
*/
public class RapidSort {
private Random ran = new Random(); // 聲明一個全局變量ran,用來隨機生成整數
/**
* method name: sortArray
* description: 對數組的快速排序,只能用於int[]類型的數組
* @return
*/
private void sortArray() {
int[] array = new int[10]; // 聲明數組長度為10
for (int i = 0 ; i array.length; i++) {
array[i] = ran.nextInt(10) + 1; // 數組賦值
}
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}
/**
* method name: sortList
* description: 對集合的快速排序,可以用於ListObject類型數組,
* 隱含意思就是對所有類型數組都適用
* @return
*/
private void sortList() {
ListInteger list = new ArrayListInteger();
for (int i = 0 ; i 10; i++) {
list.add(ran.nextInt(10) + 1); // 給集合賦10個值
}
Collections.sort(list);
System.out.println(list);
}
public static void main(String[] args) {
RapidSort rs = new RapidSort();
rs.sortArray();
rs.sortList();
}
}
java遞歸算法的例子。
階乘:
要求:給定一個數值,計算出它的階乘值,例如5的階乘為5*4*3*2*1
實現:
[html] view plaincopy
span style=”font-size:12px;” // 利用遞歸實現一個數的階乘值 private static BigDecimal getNum(BigDecimal inNum) { if (inNum.compareTo(BigDecimal.ONE) == 0) { return inNum; } return inNum.multiply(getNum(inNum.subtract(BigDecimal.ONE))); }/span
(2)Fibonacci數列:1,1,2,3,5,8,13……
要求:找出數列中指定index位置的數值
實現:
[html] view plaincopy
span style=”font-size:12px;” // 利用遞歸實現了Fibonacci數列 private static int fab(int index) { if (index == 1 || index == 2) { return 1; } else { return fab(index – 1) + fab(index – 2); } }/span
(3)漢諾塔
要求:漢諾塔挪動
實現:
[html] view plaincopy
span style=”font-size:12px;” span style=”white-space:pre;” /spanprivate static final String DISK_B = “diskB”; span style=”white-space:pre;” /spanprivate static final String DISK_C = “diskC”; span style=”white-space:pre;” /spanprivate static final String DISK_A = “diskA”; span style=”white-space:pre;” /spanstatic String from=DISK_A; span style=”white-space:pre;” /span static String to=DISK_C; span style=”white-space:pre;” /span static String mid=DISK_B; span style=”white-space:pre;” /span public static void main(String[] args) { span style=”white-space:pre;” /span String input=JOptionPane.showInputDialog(“please input the number of the disks you want me move.”); span style=”white-space:pre;” /span int num=Integer.parseInt(input); span style=”white-space:pre;” /span move(num,from,mid,to); span style=”white-space:pre;” /span }/span
[html] view plaincopy
span style=”font-size:12px;” // 利用遞歸實現漢諾塔 private static void move(int num, String from2, String mid2, String to2) { if (num == 1) { System.out.println(“move disk 1 from ” + from2 + ” to ” + to2); } else { move(num – 1, from2, to2, mid2); System.out.println(“move disk ” + num + ” from ” + from2 + ” to ” + to2); move(num – 1, mid2, from2, to2); } }/span
(4)排列組合
要求:將輸入的一個字符串中的所有元素進行排序並輸出,例如:你給出的參數是”abc”,
則程序會輸出
abc
acb
bac
bca
cab
cba
實現:
[html] view plaincopy
span style=”font-size:12px;”span style=”white-space:pre;” /spanpublic static void permute(String str) { span style=”white-space:pre;” /span char[] strArray = str.toCharArray(); span style=”white-space:pre;” /span permute(strArray, 0, strArray.length – 1); span style=”white-space:pre;” /span}/span
[html] view plaincopy
span style=”font-size:12px;” // 利用遞歸實現,將輸入的一個字符串中的所有元素進行排序並輸出 public static void permute(char[] list, int low, int high) { int i; if (low == high) { String cout = “”; for (i = 0; i = high; i++) { cout += list[i]; } System.out.println(cout); } else { for (i = low; i = high; i++) { char temp = list[low]; list[low] = list[i]; list[i] = temp; permute(list, low + 1, high); temp = list[low];
java最常用的幾種加密算法
簡單的Java加密算法有:
第一種. BASE
Base是網絡上最常見的用於傳輸Bit字節代碼的編碼方式之一,大家可以查看RFC~RFC,上面有MIME的詳細規範。Base編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base來將一個較長的唯一標識符(一般為-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。
第二種. MD
MD即Message-Digest Algorithm (信息-摘要算法),用於確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD實現。將數據(如漢字)運算為另一固定長度值,是雜湊算法的基礎原理,MD的前身有MD、MD和MD。
MD算法具有以下特點:
壓縮性:任意長度的數據,算出的MD值長度都是固定的。
容易計算:從原數據計算出MD值很容易。
抗修改性:對原數據進行任何改動,哪怕只修改個字節,所得到的MD值都有很大區別。
弱抗碰撞:已知原數據和其MD值,想找到一個具有相同MD值的數據(即偽造數據)是非常困難的。
強抗碰撞:想找到兩個不同的數據,使它們具有相同的MD值,是非常困難的。
MD的作用是讓大容量信息在用數字簽名軟件簽署私人密鑰前被”壓縮”成一種保密的格式(就是把一個任意長度的字節串變換成一定長的十六進制數字串)。除了MD以外,其中比較有名的還有sha-、RIPEMD以及Haval等。
第三種.SHA
安全哈希算法(Secure Hash Algorithm)主要適用於數字簽名標準(Digital Signature Standard DSS)裡面定義的數字簽名算法(Digital Signature Algorithm DSA)。對於長度小於^位的消息,SHA會產生一個位的消息摘要。該算法經過加密專家多年來的發展和改進已日益完善,並被廣泛使用。該算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說是對明文的一種“指紋”或是“摘要”所以對散列值的數字簽名就可以視為對此明文的數字簽名。
SHA-與MD的比較
因為二者均由MD導出,SHA-和MD彼此很相似。相應的,他們的強度和其他特性也是相似,但還有以下幾點不同:
對強行攻擊的安全性:最顯著和最重要的區別是SHA-摘要比MD摘要長 位。使用強行技術,產生任何一個報文使其摘要等於給定報摘要的難度對MD是^數量級的操作,而對SHA-則是^數量級的操作。這樣,SHA-對強行攻擊有更大的強度。
對密碼分析的安全性:由於MD的設計,易受密碼分析的攻擊,SHA-顯得不易受這樣的攻擊。
速度:在相同的硬件上,SHA-的運行速度比MD慢。
第四種.HMAC
HMAC(Hash Message Authentication Code,散列消息鑒別碼,基於密鑰的Hash算法的認證協議。消息鑒別碼實現鑒別的原理是,用公開函數和密鑰產生一個固定長度的值作為認證標識,用這個標識鑒別消息的完整性。使用一個密鑰生成一個固定大小的小數據塊,即MAC,並將其加入到消息中,然後傳輸。接收方利用與發送方共享的密鑰進行鑒別認證等。
求 Java 一些經典例子算法
1:HelloWorldApp
1.//
2.//
HelloWorld
應用示例
3.//
4.public
class
HelloWorldApp{
5.
public
static
void
main
(String
args[])
{
6.System.out.println
(“Hello
World!”);
7.
}
8.}
以上程序行是在你的屏幕上打印“Hello
World!”所需的最少代碼。
原創文章,作者:EUOG,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132942.html