一、求最值
需求1:一個數組取出最大值
/*定義一個獲取最大值的功能:
1、確定結果 :返回值類型 int
2、未知內容:要獲取哪個數組的最大值沒有確定,則是數組沒有確定
思路:
1、定義一個變量,記錄住數組的比較大的元素。
2、遍歷整個數組,讓數組的每一個元素都和該變量進行對比即可。
3、當變量遇到比它大的元素,則讓該變量記錄該元素的值,當循環結束時,最大值產生了
*/
public static int getMax(int[] arr)
{
//定義變量記錄較大的值,初始化爲數組中的任意一個元素。
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max){ //如果發現有元素比max大,那麼max變量就記錄該元素。
max = arr[x];
}
}
return max;
}
二、選擇排序
需求2:定義一個函數接收一個int類型的數組對象, 把數組中的最大值放在數組中的第一位。
選擇排序(直接排序):使用一個元素與其他 的元素挨個比較一次,符合條件交換位置。
public static void main(String[] args)
{
int[] arr = {12,5,17,8,9}; //對於5元素的數組,只需要找出4個最大值就可以排序了。
selectSort(arr);
}
public static void selectSort(int[] arr){
//把最大值放在首位置。
for(int j = 0; j<arr.length-1; j++){ // 控制的是輪數。
for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
if(arr[i]>arr[j]){
//交換位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
/*
//把老二放在第二個位置
for(int i = 2 ; i< arr.length ; i++){
if(arr[i]>arr[1]){
int temp = arr[i];
arr[i] = arr[1];
arr[1] = temp;
}
}
//把老三放在第三個位置
for(int i = 3 ; i< arr.length ; i++){
if(arr[i]>arr[2]){
int temp = arr[i];
arr[i] = arr[2];
arr[2] = temp;
}
}
//把老四放在第四個位置
for(int i = 4 ; i< arr.length ; i++){
if(arr[i]>arr[3]){
int temp = arr[i];
arr[i] = arr[3];
arr[3] = temp;
}
}
*/
//遍歷數組,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
}
}
三、冒泡排序
需求3: 定義一個函數接收一個int類型的數組對象, 把數組中的最大值放在數組中的最後一位。
冒泡排序:冒泡排序的思想就是使用相鄰的兩個 元素挨個比較一次,符合條件交換位置。
原理:內循環結束一次,最值出現在尾角標位置。
public static void main(String[] args)
{
int[] arr = {12,8,17,5,9}; // 最大的索引值: 4 容量:5
bubbleSort(arr);
}
public static void bubbleSort(int[] arr){
// 把最大值放在最後一個位置
for(int j = 0 ; j<arr.length-1 ; j++){ //控制輪數
for(int i = 0 ; i<arr.length-1-j ; i++){ // 找出一個最大值
//相鄰的元素比較
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
/*
//把老二放在倒數第二個位置上。
for(int i = 0 ; i <arr.length-1-1 ; i++){
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//把老三放在倒數第三個位置上。
for(int i = 0 ; i <arr.length-1-2 ; i++){
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
//把老四放在倒數第四個位置上。
for(int i = 0 ; i <arr.length-1-3 ; i++){
if(arr[i]>arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
*/
//遍歷數組,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
}
}
四、二分法
需求:定義一個函數接收一個數組對象和一個要查找的目標元素,函數要返回該目標元素在
數組中的索引值,如果目標元素不存在數組中,那麼返回-1表示。
折半查找法(二分法): 使用前提必需是有序的數組。
public static void main(String[] args)
{
int[] arr = {12,16,19,23,54};
//int index = searchEle(arr,23);
int index = halfSearch(arr,116);
System.out.println("元素所在的索引值是:"+ index);
}
public static int halfSearch(int[] arr, int target){
//定義三個變量分別記錄最大、最小、中間的查找範圍索引值
int max = arr.length-1;
int min = 0;
int mid = (max+min)/2;
while(true){
if(target>arr[mid]){
min = mid+1;
}else if(target<arr[mid]){
max = mid -1;
}else{
//找到了元素
return mid;
}
//沒有找到的情況
if (max<min){
return -1;
}
//重新計算中間索引值
mid = (min+max)/2;
}
}
public static int searchEle(int[] arr, int target){
for(int i = 0 ; i<arr.length ; i++){
if(arr[i]==target){
return i;
}
}
return -1;
}
五、數組翻轉
反轉其實就是頭角標和尾角標的元素進行位置的置換,然後在讓頭角標自增。尾角標自減。當頭角標<尾角標時,可以進行置換的動作
需求: 定義 一個函數接收一個char類型的數組對象,然後翻轉數組中的元素。
char[] arr = {'a','b','c','d','e'};
public static void main(String[] args)
{
//System.out.println("Hello World!");
char[] arr = {'a','b','c','d','e'};
reverse(arr);
}
public static void reverse(char[] arr){
for(int startIndex = 0 ,endIndex = arr.length-1 ; startIndex<endIndex ; startIndex++,endIndex--){
char temp = arr[startIndex];
arr[startIndex] = arr[endIndex];
arr[endIndex] = temp;
}
//遍歷數組,查看效果
System.out.print("目前的元素:");
for (int i = 0 ; i<arr.length ;i++){
System.out.print(arr[i]+",");
}
}
六、Arrays的使用
遍歷: toString() 將數組的元素以字符串的形式返回
排序: sort() 將數組按照升序排列
查找: binarySearch()在指定數組中查找指定元素,返回元素的索引,如果沒有找到返回(-插入點-1) 注意:使用查找的功能的時候,數組一定要先排序。