java陣列以及氣泡排序實現過程
阿新 • • 發佈:2018-12-18
陣列:
1.什麼是陣列
程式:由人事先寫好的,讓電腦做的
程式=演算法+資料結構
一個好的演算法+資料結構=優秀的程式
演算法:變數,運算子,分支,迴圈
資料結構:陣列是一種最基本的資料結構 集合
陣列可以理解為一個容器 水杯=容器 儲存水
陣列 容器 儲存資料
陣列只能存放具有相同資料型別的一堆資料
2.陣列的定義
語法:資料型別【】 陣列名/變數名=new 資料型別【大小】;
3.陣列的初始化
4.陣列的訪問
5.陣列的複製
6.陣列的排序
package com.lddx.day1029; //java中的陣列 public class ArrayDemo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //資料型別[] 陣列名/變數名=new 資料型別[大小]; //10 20 30 40 50 60 int[] arr1=new int[6]; //定義了一個int型別的陣列,陣列的名字為arr1。陣列的大小為6,可以在陣列arr1中儲存6個int型別的整數 double[] arr2=new double[3]; String[] arr3=new String[4]; } }
package com.lddx.day1031; import java.util.Arrays; public class ArrayDemo1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //1 陣列的概念 //2 陣列的定義 //3 陣列的初始化 //方式1:陣列在建立之後沒有具體的值,但是會有預設值這種方式稱為動態初始化,和陣列定義的語法一致 int[] arr=new int[5]; //arr陣列建立完後,只有大小,沒有具體值,但預設值為0; //arr 0 0 0 0 0 double[] arr1=new double[5]; //arr1 0.0 0.0 0.0 0.0 0.0 0.0 boolean[] arr2=new boolean[5]; //arr2 false false false false false String[] arr3=new String[5]; //String型別為引用型別,預設值為null //arr3 null null null null null //總結:陣列動態初始化後,陣列中的元素內容是有預設值的 //byte short int long char型別的陣列,預設值是0 //float double型別的陣列,預設值是false //String型別的引用型別陣列,預設值是null int[] a=new int[5]; //方式2:靜態初始化 //可以在陣列宣告的同時對數組裡的元素內容直接初始化 int[] arr4={10,20,30,40,50}; //既有大小,又有內容 //宣告的陣列arr4的大小為5,元素內容為10 20 30 40 50 char[] arr5={'a','b','c'}; //宣告陣列arr5的大小為3,內容為‘a' ’b' ‘c' String[] arr6={"張三","李四"}; //宣告的陣列arr6的大小為2,內容為“張三” “李四” // int[] arr7={7,'m',"張三",true};編譯錯誤,{}裡的內容要和陣列的資料型別匹配 //方式3:也屬於靜態初始化的方式 //方式1+方式2的結合 int[] arr8=new int[]{100,200,300}; //陣列arr8的大小為3,陣列的內容為100 200 300 //注意:一種錯誤的寫法 int[] arr9;//先宣告一個數組,為arr9 //arr9={10,20,30};//編譯錯誤,java語法不允許這樣寫 arr9=new int[3];//ok 陣列arr9大小為3,內容為0 0 0 arr9=new int[]{10,20,30};//ok 陣列arr9的大小為3,內容為10 20 30 // int[] arr10=new int[];//編譯錯誤;方式一動態初始化方式必須寫大小 //4關於陣列的訪問 int[] arr11=new int[3];//0 0 0 //通過length屬性訪問陣列的大小,語法:陣列名.length System.out.println(arr11.length);//3 int[] arr12={10,20,30,40,50};//陣列加內容 System.out.println(arr12.length);//5 //通過下標對陣列進行訪問和操作 //陣列下標的特點:從0開始,到length-1結束 //語法:陣列名【下標】 System.out.println(arr11[0]);//0 System.out.println(arr11[1]);//0 System.out.println(arr11[2]);//0 System.out.println(arr12[2]);//30 //將陣列arr12中的20替換為200 arr12[1]=200; System.out.println(arr12[1]);//200 //輸出arr12陣列中的最後一個元素 System.out.println(arr12[arr12.length-1]);//50 軟編碼方式 //System.out.println(arr12[5]);//執行錯誤 //arr12陣列的大小為5,下標是0-4.陣列越界 //將陣列arr12中的所有元素內容輸出 System.out.println(arr12);//[
[email protected] //根據的是陣列在記憶體中的地址值 //根據陣列下標輸出 for(int i=0;i<arr12.length;i++) System.out.println(arr12[i]); // Arrays.toString()方法能夠將數組裡的東西輸出System.out.println(Arrays.toString(arr12)); //要求20和30交換位置,並輸出交換後的內容 int[] arr14={10,20,30,40,50}; int m=0,n=0; for(int i=0;i<arr14.length;i++){ if(arr14[i]==20) m=i; if(arr14[i]==30) n=i; } int x; x=arr14[m]; arr14[m]=arr14[n]; arr14[n]=x; for(int i=0;i<arr14.length;i++) System.out.println(arr14[i]); //關於陣列的複製 通過自己寫程式碼的方式完成陣列的複製 int[] arr15={10,20,30,40,50}; //屬於靜態初始化的方式,大小為5,內容為10,20,30,40,50 int[] arr16=new int[5]; //arr16屬於動態初始化的方式,大小為5,內容為 0 0 0 0 0 System.out.println("複製前:"+Arrays.toString(arr16)); //思路:從arr15中取出元素內容放入arr16陣列中 for(int i=0;i<arr15.length;i++) arr16[i]=arr15[i]; System.out.println("複製後:"+Arrays.toString(arr16)); //使用java中提供的一種方法完成陣列的複製 //System.out.println() //System.in //完成陣列複製 //system.arraycopy(src,srcPos,dest,destPos,length) /* * src:源陣列(要被複制的陣列) * srcPos:源陣列的起始下標位置 * dest:目標陣列 * destPos:目標陣列的起始下標位置 * length:要複製的源陣列的元素個數 */ int[] arr17={2,5,7,9,11};//源陣列 int[] arr18=new int[5];//目標陣列 System.arraycopy(arr17, 1, arr18, 2, 3); //System.arraycopy(arr17, 0, arr18, 0, arr17.length); System.out.println("複製後:"+Arrays.toString(arr18)); //練習:將源陣列arr17中的579複製到目標陣列arr19中的最後三個位置 //使用Arrays。copyOf()方法完成陣列的複製 //語法:目標陣列=Arrays.copyOf(源陣列,目標陣列的長度) int[] arr20={2,5,7,9,1}; int[] arr21=Arrays.copyOf(arr20,5); System.out.println("目標陣列:"+Arrays.toString(arr21)); //如果目標陣列的長度小於源陣列的長度,會進行擷取操作 int[] arr22=Arrays.copyOf(arr20, 3); System.out.println(Arrays.toString(arr22));//生成的目標陣列arr22大小為3,源陣列後的9,1會舍掉 //如果目標陣列的長度大於源陣列的長度,會進行填充 填充的內容:0 0.0 false null double[] arr23={10.3,3.14,20.5}; double[] arr24=Arrays.copyOf(arr23, 6); System.out.println(Arrays.toString(arr24)); boolean[] arr25={true,true,false,false,true}; boolean[] arr26=Arrays.copyOf(arr25, 8); System.out.println(Arrays.toString(arr26)); String[] arr27={"a","c","d"}; String[] arr28=Arrays.copyOf(arr27,5); System.out.println(Arrays.toString(arr28)); } }
package com.lddx.day1031;
import java.util.Arrays;
import java.util.Random;
//氣泡排序演算法
public class BulleSortDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//int[] arr={89,23,65,4};
int[] arr=new int[1000000];
Random r=new Random();
for(int i=0;i<arr.length;i++)
arr[i]=r.nextInt(10000);
//i=0 1 2 3
long t1=System.currentTimeMillis();
for(int i=0;i<arr.length-1;i++){
//每一輪2個數之間的比較
/*
* i=0 j=0 1 2 3次比較
* i=1 j=0 1 2次比較
* i=3 j=0 1次比較
*/
for(int j=0;j<arr.length-1-i;j++)
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println(Arrays.toString(arr));
long t2=System.currentTimeMillis();
long t3=t2-t1;
System.out.println(t3);
}
}
package com.lddx.day1101;
import java.util.Arrays;
import java.util.Random;
//演示java中的排序
public class ArraySortDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//int[] arr={3,1,9,20,5};
int[] arr=new int[1000000];
Random r=new Random();
for(int i=0;i<arr.length;i++)
arr[i]=r.nextInt(10000);
//i=0 1 2 3
long t1=System.currentTimeMillis();
//System.out.println("排序前:"+Arrays.toString(arr));
/*
* Arrays.toString()
* Arrays.copyOf()
*
*/
Arrays.sort(arr);
// System.out.println("排序後:"+Arrays.toString(arr));
long t2=System.currentTimeMillis();
long t3=t2-t1;
System.out.println(t3);
}
}
package com.lddx.day1101;
import java.util.Scanner;
public class 陣列練習 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("請輸入班級人數:");
int number=sc.nextInt();
double[] socre=new double[number];
String[] name=new String[number];
for(int i=1;i<=number;i++){
System.out.print("請輸入第"+i+"位同學的姓名和成績:");
name[i-1]=sc.next();
socre[i-1]=sc.nextDouble();
}
double max=0;
double min=100;
int a=0;
int b=0;
double sum=0.0;
for(int i=1;i<=number;i++){
if(max<socre[i-1]){
max=socre[i-1];a=i-1;
}
if(min>socre[i-1]){
min=socre[i-1];b=i-1;
}
sum+=socre[i-1];
}
System.out.println("總分:"+sum);
System.out.println("平均分:"+sum/number);
System.out.println("最高分:"+name[a]+"\t"+socre[a]);
System.out.println("最低分:"+name[b]+"\t"+socre[b]);
}
}