1. 程式人生 > >常用排序算法總結

常用排序算法總結

per 排序 數組長度 sys pan max ID 數組a com

package com.company;
import java.util.Arrays;
import java.util.Scanner;
public class ArraysDemo {
public static void main(String[] args) {

}
}
class BubbleSort{
/*
冒泡排序
需求:給定一個數組,將它相鄰的兩個數依次進行排序,輸出最大值和最小值
例如:-1,54,36,89,0,45
第一輪:-1,54,36,89,0,45
-1,36,54,89,0,45
-1,36,54,89,0,45
-1,36,54,0,89,45
-1,36,54,0,45,89
第二輪:-1,36,54,0,45,89
-1,36,54,0,45,89
-1,36,0,54,45,89
-1,36,0,45,54,89
第三輪:-1,36,0,45,54,89
-1,0,36,45,54,89
-1,0,36,45,54,89

*/
public static void main(String[] args) {
//定義一個整型數組
int[] arr = {0, 154, 9, 89, -1, 45};
printArray(arr);
Arrays.sort(arr);
printArray(arr);
//定義一個變量接受getMax調用的返回值
int max = getMax(arr);
int min = getMin(arr);
System.out.println("max=" + max); //souf快捷鍵
System.out.println("min="+min);

}
//打印數組
public static void printArray(int[] arr){
for (int x=0;x<arr.length; x++){
if(x!=arr.length-1){
System.out.print(arr[x]+",");
}else{
System.out.println(arr[x]);
}
}
}
//獲取數組中的最大值
public static int getMax(int[] arr) {
//遍歷每一輪輪數,數組長度-1(arr.length-1)
for (int i = 0; i < arr.length - 1; i++) {
//遍歷每一輪中每相鄰兩個數比較的次數
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;
*/
swap(arr,j,j+1);
}
}
}
return arr[0];

}
//獲取數組中的最小值
public static int getMin(int[] arr){
//遍歷每一輪輪數,數組長度-1(arr.length-1)
for (int i = 0; i < arr.length - 1; i++) {
//遍歷每一輪中每相鄰兩個數比較的次數
for (int j = 0; j < arr.length -1-i; j++) {
/* //定義一個變量存放較小值
int min = 0;*/
//判斷這兩個數的大小,將較大的數存放在一個變量裏,交換位置,最終將較大數輸出
if (arr[j] > arr[j+1]) {
/*int temp = arr[j];
//交換位置
arr[j] = arr[j+1];
arr[j+1] = temp;*/
swap(arr,j,j+1);

}
}
}
return arr[0];
}
//交換位置代碼抽取
public static void swap(int[] arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}

}
class ChooseSort{
/*
選擇排序,指定位置的元素和後面一個元素比較,遇到比指定元素較小的值,交換位置,直到左側出現最小值,停
例如:110,10,25,57,20,-1
10,110,25,57,20,-1
10,25,110,57,20,-1
10,25,57,110,20,-1
10,25,57,20,110,-1
-1,10,25,57,20,110
*/
public static void main(String[] args) {
int[] arr = {110,10,25,57,20,-1};
//定義一個變量接受getMin方法中的返回值
int min=getMin(arr);
System.out.println("min="+min);

}
public static int getMin(int[] arr){
for (int i=0;i<arr.length-1;i++){
//遍歷第一個元素與後面元素的比較 x=i+1表示數組中指定的第一個元素與後面元素依次比較的次數
for (int x=i+1;x<arr.length;x++){
//判斷每次遍歷後第一個元素與後面元素哪個值小
if (arr[i]>arr[x]){
//定義一個臨時變量存放最小值
int temp = arr[i];
//交換位置
arr[i]=arr[x];
arr[x]=temp;

}
}
}
return arr[0];//返回的是數組下標數
}
}
class ArrOperate {
/*
需求:定義一個數組,實現對數組添加和刪除操作
*/
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("請輸入您要創建數組的長度:");
//給定一個數組的長度
int[] arr = new int[s.nextInt()];
//定義一個輸入幾個數的累加器
int num = 1;
//遍歷要輸入的數,並存放在數組中
for (int i = 0; i < arr.length; i++) {
System.out.print("請輸入" + num + "個數:");
arr[i] = s.nextInt();
num++;
}

//遍歷數組
System.out.print("原數組為:");
for (int a : arr) { //遍歷(for each)數組arr,將每一次訪問數組中的arr元素存入變量a中

System.out.print(a + "\t");

}
//向指定的位置插入數
System.out.println("\n"+"請輸入要插入數的位置:");
//定義一個變量,指定要存放這個數的位置
int index = s.nextInt();
System.out.print("您要插入的這個數為:");
int n = s.nextInt();
arrAdd(arr,index,n);
System.out.println("\n"+"請輸入要刪除的這個數");
int x= s.nextInt();
int m=x-1;
//int[] arras;
//arras=arrAdd(arr,index,n);
deleteArray(arr,m);

}

public static int[] arrAdd(int[] arrs, int index, int n) {
//用下標值判斷新數組的長度
if (index >= 0 && index< arrs.length) {
//擴容
int[] newArry = Arrays.copyOf(arrs, arrs.length + 1);
newArry[index] = n;

//遍歷新數組
for (int i = index + 1; i < newArry.length; i++){
newArry[i]=arrs[i-1];
}
arrs=newArry;
//將新數組與原來的數組重新遍歷
for (int i=0;i<newArry.length;i++){
System.out.print(arrs[i]+" ");

}
}
return arrs;

}
public static void deleteArray(int[] arr,int index){
if(index>=0 && index<arr.length){
//刪除
for (int i=0;i<arr.length-1;i++){
//
if (index<=i){
arr[i]=arr[i+1];
}
}
//
int[] c=Arrays.copyOf(arr,arr.length-1);
arr=c;
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}

}
else {
System.out.println(" ");
}
}
}

常用排序算法總結