java的基礎算法

Java排序算法的比較java

import java.util.*; 
import java.io.*;node

public class SortAlgorithm 

static Random rand = new Random();算法

void bubbleSort(int[] numlist) // 冒泡排序算法 

int temp; 
for(int j=1;j<numlist.length;j++) 
for(int i=0;i<numlist.length-j;i++) 
if(numlist>numlist[i+1]) 

temp = numlist[i+1]; 
numlist[i+1] = numlist; 
numlist = temp; 

}數組

void selectionSort (int[] numlist) //選擇排序算法 

int temp; 
for(int i=0;i<numlist.length-1;i++) 
for(int j=i+1;j<numlist.length;j++) 
if(numlist>numlist[j]) 

temp = numlist[j]; 
numlist[j] = numlist; 
numlist = temp;dom


}函數

void insertSort (int[] numlist) //插入排序算法 

int temp,in,out; 
for(out=1;out<numlist.length;out++) 

temp=numlist[out]; 
in=out; 
while(in>0 && numlist[in-1]>=temp) 

numlist[in]=numlist[in-1]; 
--in; 

numlist[in]=temp; 
}this

}url

void display (int[] num) // 打印出排序結果 

for(int i = 0;i<num.length;i++) 
System.out.print(num+" "); 
System.out.println("");.net

}rest

static int pRand(int mod) // 生成隨即數組 

return Math.abs(rand.nextInt())%mod;

}

public static void main(String args[])throws IOException 

SortAlgorithm sortAlgorithm = new SortAlgorithm(); 
int[] numList = new int[10];

for(int i = 0;i<numList.length;i++) 
numList = pRand(100); //調用pRand方法,把隨即生成的數據輸入到 
// 數組中

System.out.println("隨即生成的數組是:"); 
// 打印出原數組, 
for(int j =0;j<numList.length;j++) 
System.out.print(numList[j]+" ");

System.out.println(""); 
long begin = System.currentTimeMillis(); //排序開始時間,調用系統的當前時間 
sortAlgorithm.bubbleSort(numList); //執行冒泡排序 
long end = System.currentTimeMillis(); //排序結束時間,調用系統當前時間 
System.out.println("冒泡排序用時爲:" + (end-begin)); //排序用時 
System.out.println("排序後的數組爲:"); 
sortAlgorithm.display(numList);

begin = System.currentTimeMillis(); 
sortAlgorithm.selectionSort(numList); 
end = System.currentTimeMillis(); 
System.out.println("選擇排序用時爲:" +(end-begin)); 
System.out.println("排序後的數組爲:"); 
sortAlgorithm.display(numList);

begin = System.currentTimeMillis(); 
sortAlgorithm.insertSort(numList); 
end = System.currentTimeMillis(); 
System.out.println("插入排序用時爲:" + (end-begin)); 
System.out.println("排序後的數組爲:"); 
sortAlgorithm.display(numList);

}

}

題目以下:用一、二、二、三、四、5這六個數字,用java寫一個main函數,打印出全部不一樣的排列,如:51223四、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。

static int[] bits = new int[] { 1, 2, 3, 4, 5 }; 
/** 
* @param args 
*/ 
public static void main(String[] args) { 
sort("", bits); 

private static void sort(String prefix, int[] a) { 
if (a.length == 1) { 
System.out.println(prefix + a[0]); 

for (int i = 0; i < a.length; i++) { 
sort(prefix + a, copy(a, i)); 


private static int[] copy(int[] a,int index){ 
int[] b = new int[a.length-1]; 
System.arraycopy(a, 0, b, 0, index); 
System.arraycopy(a, index+1, b, index, a.length-index-1); 
return b; 
}

**********************************************************************

基本思路: 
1 把問題歸結爲圖結構的遍歷問題。實際上6個數字就是六個結點,把六個結點鏈接成無向連通圖,對於每個結點求這個圖形的遍歷路徑,全部結點的遍歷路徑就是最後對這6個數字的排列組合結果集。 
2 顯然這個結果集還未達到題目的要求。從如下幾個方面考慮: 
1. 3,5不能相連:實際要求這個連通圖的結點3,5之間不能連通, 可在構造圖結構時就知足改條件,而後再遍歷圖。 
2. 不能有重複: 考慮到有兩個2,明顯會存在重複結果,能夠把結果集放在TreeSet中過濾重複結果 
3. 4不能在第三位: 仍舊在結果集中去除知足此條件的結果。 
採用二維數組定義圖結構,最後的代碼是: 
import java.util.Iterator; 
import java.util.TreeSet; 
public class TestQuestion { 
private String[] b = new String[]{"1", "2", "2", "3", "4", "5"}; 
private int n = b.length; 
private boolean[] visited = new boolean[n]; 
private int[][] a = new int[n][n]; 
private String result = ""; 
private TreeSet set = new TreeSet(); 
public static void main(String[] args) { 
new TestQuestion().start(); 

private void start() { 
// Initial the map a[][] 
for (int i = 0; i < n; i++) { 
for (int j = 0; j < n; j++) { 
if (i == j) { 
a[j] = 0; 
} else { 
a[j] = 1; 



// 3 and 5 can not be the neighbor. 
a[3][5] = 0; 
a[5][3] = 0; 
// Begin to depth search. 
for (int i = 0; i < n; i++) { 
this.depthFirstSearch(i); 

// Print result treeset. 
Iterator it = set.iterator(); 
while (it.hasNext()) { 
String string = (String) it.next(); 
// "4" can not be the third position. 
if (string.indexOf("4") != 2) { 
System.out.println(string); 



private void depthFirstSearch(int startIndex) { 
visited[startIndex] = true; 
result = result + b[startIndex]; 
if (result.length() == n) { 
// Filt the duplicate value. 
set.add(result); 

for(int j = 0; j < n; j++) { 
if (a[startIndex][j] == 1 && visited[j] == false) { 
depthFirstSearch(j); 
} else { 
continue; 


// restore the result value and visited value after listing a node. 
result = result.substring(0, result.length() -1); 
visited[startIndex] = false; 

}

1.寫一個方法,用一個for循環打印九九乘法表 
Java code 
/** 
* 打印九九乘法口訣表 
*/ 
public 
void nineNineMulitTable(){ 
for (int i = 
1,j = 
1; j <= 
9; i++) { 
System.out.print(i+"*"+j+"="+i*j+" 
"); 
if(i==j){ 
i=0; 
j++; 
System.out.println(); 


}

2.給定一個java.util.Date對象,如何轉化爲」2007-3-22 20:23:22」格式的字符串 
Java code 
/** 
* 將某個日期以固定格式轉化成字符串 
* @param date 
* @return str 
*/ 
public String date2FormatStr(Date date) 

SimpleDateFormat sdf = 
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String str = sdf.format(date); 
return str; 
}

3.寫一個方法,可以判斷任意一個整數是否素數

/** 
* 判斷任意一個整數是否素數 
* @param num 
* @return boolean 
*/ 
public boolean isPrimeNumber(int num) 

for (int i = 2; i <= Math.sqrt(num); i++) { 
if(num%i==0) 

return false; 


return true; 
}

4.寫一個方法,輸入任意一個整數,返回它的階乘

Java code 
/** 
*得到任意一個整數的階乘 
*@param n 
*@returnn
*/ 
public int factorial(int num) 

//遞歸 
if(num == 1) 

return 1; 

return num*factorial(num-1); 
}

5.寫一個方法,用二分查找法判斷任意整數在任意整數數組裏面是否存在,若存在就返回它在數組中的索引位置,不存在返回-1

Java code 
/** 
*二分查找特定整數在整型數組中的位置(遞歸) 
*@param dataset 
*@param data 
*@param beginIndex 
*@param endIndex 
*@return index 
*/ 
public int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){ 
int midIndex = (beginIndex+endIndex)/2; 
//若是查找的數要比開始索引的數據要小或者是比結束索引的書要大,或者開始查找的索引值大於結束的索引值返回-1沒有查到 
if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){ 
return -1; 

if(data <dataset[midIndex]){ 
return binarySearch(dataset,data,beginIndex,midIndex-1); 
}else if(data>dataset[midIndex]) 

return binarySearch(dataset,data,midIndex+1,endIndex); 
}else { 
return midIndex; 

}

/** 
*二分查找特定整數在整型數組中的位置(非遞歸) 
*@param dataset 
*@param data 
*@return index */ public int binarySearch(int[] dataset ,int data) { int beginIndex = 0; int endIndex = dataset.length - 1; int midIndex = -1; if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){ return -1; } while(beginIndex <= endIndex) { midIndex = (beginIndex+endIndex)/2; if(data <dataset[midIndex]) { endIndex = midIndex-1; } else if(data>dataset[midIndex]) { beginIndex = midIndex+1; }else { return midIndex; } } return -1; }

相關文章
相關標籤/搜索