選擇排序
遍歷查找數(shù)組中最小數(shù)
將它與原本處于最小值位置的數(shù)字交換
實現(xiàn)
//選擇排序
public class SelectionSort {
private SelectionSort(){
}
public static void sort(int[] arr ){
int n = arr.length;//數(shù)組長度
for (int i = 0;i<n;i++){
int min = i;//存儲每次比較那個最小的數(shù)下標(biāo)(一開始只有一個數(shù)默認(rèn)它為最小)
//往后循環(huán) 拿到它所得到最小的那個數(shù)的下標(biāo)
for (int j = i+1;j<n;j++){
if (arr[min] > arr[j]){
min = j;//儲存最小的那個數(shù)的下標(biāo)
}
}
swap(arr, min, i);//然后與它從小到大排序的那位數(shù)交換
}
}
private static void swap(int arr[],int i,int j){
int temp = arr[i];//每次遍歷最小的那個數(shù)
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {10,9,8,7,6,5,4,3,2,1};
SelectionSort.sort(arr);
for( int i = 0 ; i < arr.length ; i ++ ){
System.out.print(arr[i]);
System.out.print(" ");
}
System.out.println();
}
}
效果:
插入排序
分為左右兩個排序數(shù)組
左邊默認(rèn)為排好序
右邊第一個元素與左邊數(shù)組最后一位比較
若小于則交換 繼續(xù)與最后一位的前一位進(jìn)行對比 以此類推
實現(xiàn):
//插入排序?qū)崿F(xiàn)
public class InsertSort {
private InsertSort(){
}
public static void insert(int[] arr){
int n = arr.length;
//這里i=1因為不用考慮第一個元素
// 默認(rèn)就是有序的
//分為左右有序列和無序列钧大,一開始存儲的元素
// 與有序列進(jìn)行比較
for (int i = 1;i<n;i++){
for (int j = i;j>0;j--){
//如果j比它前一個元素還小
if(arr[j] < arr[j-1]){
//則互換位置
swap(arr, j, j-1);
}
}
}
}
private static void swap(int arr[],int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {10,9,8,5,6,7,4,3,2,1};
InsertSort.insert(arr);
for( int i = 0 ; i < arr.length ; i ++ ){
System.out.print(arr[i]);
System.out.print(" ");
}
System.out.println();
}
}
選擇排序與插入排序之間的區(qū)別:
選擇排序是選取一個最小數(shù),然后不斷與后面的元素進(jìn)行比較罩旋,存儲最后比較到的最小的數(shù)并插入(temp值一直在變化)
插入排序是分成有序列與無序列啊央,新加入有序列的元素與已在有序列中的元素互相比較(相當(dāng)與往前一個個地比較)
冒泡排序
冒泡排序就是不斷地進(jìn)行兩兩互換
public class BubbleSort {
private BubbleSort(){
}
public static void bubble(int arr[]){
int n = arr.length;
boolean swapped = false;//判斷它是否互換過
do {
swapped = false;
for (int i = 1;i<n;i++){
if(arr[i] < arr[i-1]){
swap(arr, i-1, i);
swapped = true;
}
}
// 優(yōu)化, 每一趟Bubble Sort都將最大的元素放在了最后的位置
// 所以下一次排序, 最后的元素可以不再考慮
n --;
}while (swapped);
}
private static void swap(int arr[],int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {10,9,8,7,6,5,4,3,2,1};
BubbleSort.bubble(arr);
for( int i = 0 ; i < arr.length ; i ++ ){
System.out.print(arr[i]);
System.out.print(" ");
}
System.out.println();
}
}