Java簡單演算法(陣列)
阿新 • • 發佈:2018-11-19
找出陣列中的最大值
//找出陣列中的最大值 static void getMax() { int a[] = {15, 35, 18, 87, 48, 6, 84, 57, 98}; int max = a[0]; for (int i = 1; i < a.length; i++) { if (max < a[i]) { max = a[i]; } } System.out.println(max); }
算出陣列中資料的平均值
//算出陣列中資料的平均值 static void getArray() { int b[] = {15, 35, 18, 87, 48, 6, 84, 57, 98}; int sum = b[0]; int array; for (int j = 1; j < b.length; j++) { sum = sum + b[j]; } array = sum / b.length; System.out.println(array); }
把陣列倒序並遍歷
//把陣列倒序並遍歷 static void getSunxu() { int c[] = {15, 35, 18, 87, 48, 6, 84, 57, 98}; int d[] = new int[c.length]; for (int i = 0; i < c.length; i++) { d[c.length - 1 - i] = c[i]; } for (int j : d ) { System.out.println(j); } }
拷貝陣列
//拷貝陣列
static void arrayCopy() {
int a[] = {1, 2, 3, 4, 5};
int b[] = {6, 7, 8, 9, 10};
System.arraycopy(a, 1, b, 2, 3);//拷貝哪個陣列,從第幾個開始,拷到哪個陣列,從第幾個開始
for (int i : b
) {
System.out.println(i);
}
}
搜尋key在陣列的哪個位置
//搜尋key在陣列的哪個位置
static void Search() {
int a[] = {6, 5, 4, 3, 2, 1};
int key = 1;
Arrays.sort(a);
System.out.println(Arrays.binarySearch(a, key));
}
二分查詢
//二分查詢
static int erfen(int key) {
int[] a = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int lo = 0;
int hi = a.length - 1;
Arrays.sort(a);//1,2,3,4,5,6,7,8,9
while (lo <= hi) {
int mid = (hi + lo) / 2;
if (key < a[mid]) {
hi = mid - 1;
} else if (key > a[mid]) {
lo = mid + 1;
} else {
return mid;
}
}
return -1;
}
遍歷二維陣列
//遍歷二維陣列
static void Test() {
int[][] a = {{1, 2, 3, 4, 5}, {6, 7, 8}};
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]);
}
}
System.out.println();
for (int[] i : a) {
for (int j : i) {
System.out.print(j);
}
}
}
遍歷三維陣列
//遍歷三維陣列
static void go() {
int[][][] a = {{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}};
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
for (int k = 0; k < a[i][j].length; k++) {
System.out.print(a[i][j][k]);
}
}
}
System.out.println();
for (int i[][] : a
) {
for (int j[] : i
) {
for (int k : j
) {
System.out.print(k);
}
}
}
}
}
判斷是否為閏年,以及年齡段
//判斷是否為閏年,以及年齡段
public static void half() {
int year = 2000;
int age = 45;
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
System.out.println("閏年");
} else {
System.out.println("不是閏年");
}
if ((20 < age) && (age <= 40)) {
System.out.println("青年人");
} else if ((40 < age) && (age <= 60)) {
System.out.println("中年人");
} else if (60 < age) {
System.out.println("老年人");
}
}
用switch輸出春夏秋冬
//用switch輸出春夏秋冬
static void nice() {
int month = 1;
switch (month) {
case 12:
case 1:
case 2:
System.out.println("冬天");
break;
case 3:
case 4:
case 5:
System.out.println("春天");
break;
case 6:
case 7:
case 8:
System.out.println("夏天");
break;
case 9:
case 10:
case 11:
System.out.println("秋天");
break;
}
}
按分數輸出等級
//按分數輸出等級
static void rng() {
int grade = 85;
int level = grade / 10;
switch (level) {
case 9: {
System.out.println("5");
break;
}
case 8: {
System.out.println("4");
break;
}
case 7: {
System.out.println("3");
break;
}
case 6: {
System.out.println("2");
break;
}
case 5: {
System.out.println("1");
break;
}
}
}
輸出特定格式
//輸出特定格式
static void rw() {
for (int i = 1; i < 4; i++) {
for (int j = 1; j < 10; j++) {
System.out.print("*");
}
System.out.println();
}
}
//結果:
*********
*********
*********
-----------------------------------------------------------------------------------------
static void jd() {
int s = 2;
for (int i = 1; i < 5; i++) {
for (int j = 0; j < s; j++) {
System.out.print(s);
}
s = s + 2;
System.out.println();
}
}
//結果:
22
4444
666666
88888888
-----------------------------------------------------------------------------------------
static void sn() {
String sb = "*";
for (int i = 1; i < 5; i++) {
for (int j = 0; j < 10-i; j++) {
System.out.print(" ");
}
sb = sb+"*";
System.out.println(sb);
}
}
//結果:
**
***
****
*****
-----------------------------------------------------------------------------------------
static void start(){
for (int i=1;i<10;i++){
for (int j=1;j<i+1;j++){
System.out.print(i+"*"+j+"="+i*j+" ");
}
System.out.println();
}
}
//結果:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
-----------------------------------------------------------------------------------------
//小明想攢100元錢,媽媽每天給2.5元,每五天小明花6元,多少天能攢到100元錢?
static void skt() {
int day = 0;
int moneyday = 0;
double summoney = 0.0;
double money = 2.5;
while (summoney <= 100) {
summoney = summoney + money;
day++;
moneyday++;
if (moneyday % 5 == 0) {
summoney = summoney - 6;
}
}
System.out.println(day);
}
//結果:
74
##氣泡排序##
//##氣泡排序##
//特點:效率低,實現簡單
//思想:每一趟將待排序序列中最大元素移到最後,剩下的為新的待排序序列,重複上述步驟直到排完所有元素。
//這只是氣泡排序的一種,當然也可以從後往前排。
public void bubbleSort(int array[]) {
int t = 0;
for (int i = 0; i < array.length - 1; i++)
for (int j = 0; j < array.length - 1 - i; j++)
if (array[j] > array[j + 1]) {
t = array[j];
array[j] = array[j + 1];
array[j + 1] = t;
}
}
##選擇排序##
//##選擇排序##
//特點:效率低,容易實現。
//思想:每一趟從待排序序列選擇一個最小的元素放到已排好序序列的末尾,剩下的為待排序序列,
//重複上述步驟 直到完成排序。
public void selectSort(int array[]) {
int t = 0;
for (int i = 0; i < array.length - 1; i++){
int index=i;
for (int j = i + 1; j < array.length; j++)
if (array[index] > array[j])
index=j;
if(index!=i){ //找到了比array[i]小的則與array[i]交換位置
t = array[i];
array[i] = array[index];
array[index] = t;
}
}
}
##插入排序##
//##插入排序##
//特點:效率低,容易實現。
//思想:將陣列分為兩部分,將後部分元素逐一與前部分元素比較,如果前部分元素比array[i]小,
//就將前部分元素往後移動。當沒有比array[i]小的元素,即是合理位置,在此位置插入array[i]
public void insertionSort(int array[]) {
int i, j, t = 0;
for (i = 1; i < array.length; i++) {
if(a[i]<a[i-1]){
t = array[i];
for (j = i - 1; j >= 0 && t < array[j]; j--)
array[j + 1] = array[j];
//插入array[i]
array[j + 1] = t;
}
}
}
##快速排序##
//快速排序
//特點:高效,時間複雜度為nlogn。
//採用分治法的思想:首先設定一個軸值pivot,
//然後以這個軸值為劃分基準將待排序序列分成比pivot大和比pivot小的兩部分,
//接下來對劃分完的子序列進行快排直到子序列為一個元素為止。
public void quickSort(int array[], int low, int high) {// 傳入low=0,high=array.length-1;
int pivot, p_pos, i, t;// pivot->位索引;p_pos->軸值。
if (low < high) {
p_pos = low;
pivot = array[p_pos];
for (i = low + 1; i <= high; i++)
if (array[i] > pivot) {
p_pos++;
t = array[p_pos];
array[p_pos] = array[i];
array[i] = t;
}
t = array[low];
array[low] = array[p_pos];
array[p_pos] = t;
// 分而治之
quickSort(array, low, p_pos - 1);// 排序左半部分
quickSort(array, p_pos + 1, high);// 排序右半部分
}