演算法分析之冒泡,快速,選擇排序
一:排序
1.氣泡排序:其基本原理是相鄰的兩個數進行比較
public class BubbleSort {
public void bubbleSort(int[] arr) {
int temp;
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length - 1; j >i; --j) {
if (arr[j - 1] > arr[j]) {//冒泡的核心:相鄰的進行比較,而不是外層元素依次和內層元素比較
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
sum++;//檢視外層迴圈進行的次數
}
System.out.println(sum);
for (int m = 0; m < arr.length; m++) {
System.out
}
}
public static void main(String[] args) {
int[] arr =new int[] { 3, 55, 66, 43, 63, 24,32, 44, 23, 534, 532, 64 };
newBubbleSort().bubbleSort(arr);
}
}
時間複雜度為O(N^2) (比較次數N*N/2,交換N*N/4)這個怎麼算的?;
適用於n比較小的情況
2.選擇排序
基本原理是選取要比較的數依次與後面的數進行比較,先把要比較數做一個標記
public classSelectionSort {
public void selectSort(int [] intArr){
int max,in,out,temp;
for(out=0;out<intArr.length;out++){//控制迴圈的次數
max = out;//把要進行比較的數進行標記A
for(in=out+1;in<intArr.length;in++){
if(intArr[max]<intArr[in]){//如果小於則將標記交換
max = in;//內層迴圈結束後,這裡是標記B
}
}
temp = intArr[out];//下面三步是將兩個標記的數進行交換
intArr[out]= intArr[max];
intArr[max] = temp;
}
for(int x :intArr){
System.out.print(x+":");
}
}
public static void main(String[] args) {
//int intArr[] =new int[]{13,2,34,132,432,34,53,13,56,34,224,1344,554,22344,23453,3,555,666,223};
int intArr[] =new int[]{4,3,2,1};
newSelectionSort().selectSort(intArr);
}
}
時間複雜度:O(N*N),比較N*N/2,交換<N;與冒泡相比,比較次數沒有明顯改變,但交換次數明顯減少許多。
適用於n比較小的情況
3.插入排序(適用於部分資料已經排好序的情況)
核心思想是:依次取出要排序的那個數字分別與排好序的資料進行依次比較,找到那個滿足條件的數的前一個停止比較,進行插入,。
時間複雜度:O(n^2) ,比較N*N/4,複製N*N/4;插入排序在隨機數的情況下比冒泡快一倍,比選擇稍快;在基本有序的數字中,插入幾乎只需O(N);在逆序的情
//況下,不必冒泡快。
package com.yxyt.sort;
public class InsertSort {
/**
* 插入排序
*/
public void insertSort(int[] arr) {
int j, temp;
for (int i = 0; i < arr.length; i++) {
j = i - 1;//因為每次都是和他本身前一個比較。
temp = arr[i];
for (; j >=0; j--) {
if (temp < arr[j]) {
arr[j + 1] = arr[j];不符合條件依次向後移
} else {
break;//找到滿足條件退出比較
}
}
arr[j + 1] = temp;
}
for (int x : arr) {
System.out.print(x +"!");
}
}
public static void main(String[] args) {
int intArr[] =new int[] { 13, 2, 34, 132, 432,34, 53, 13, 56, 34,
224, 1344, 554, 22344,23453, 3, 555, 666, 223 };
// int intArr[] =new int[]{4,3,2,1};
newInsertSort().insertSort(intArr);
}
}