數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索算法和索引技術有關。
圖形結構 樹形結構 線性結構 集合結構
1.冒泡排序
在進行冒泡法排序(升序)時,將第一個數與後繼的數進行比較,如果順序則繼續第二個數與後繼的數進行比較;如果逆序則交換位置,繼續和後繼的數進行比較,完成第一趟冒泡排序。同理,直到數組有序。
如果經過一趟冒泡排序不發生數據交換說明數組原本有序。
最好時間複雜度:O(n)
平均時間複雜度:O(n^2)
最壞時間複雜度: O(n^2)
空間複雜度: O(1)
代碼示例
/**
* 冒泡排序
*
* @param array
* @return 相鄰數據對比,交互位置
*/
public static int[] bubblingSort(int[] array) {
//從後一位開始循環對比,直到循環完。
for (int i = array.length - 1; i > 0; i--) {
boolean flag = true;
//把最大的篩選到最後
for (int j = 0; j < array.length - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = false;
}
}
//優化減少循環的次數
if (flag) {
break;
}
}
return array;
}
public static void main(String[] args) {
int[] array = new int[]{3, 2, 5, 8, 1, 9, 4, 6, 7};
bubblingSort(array);
for (int i : array) {
System.out.print(i + " ");
}
}
排序結果:
第1次排序:[2,3,5,1,8,4,6,7,9]
第2次排序:[2,3,1,5,4,6,7,8,9]
第3次排序:[2,1,3,4,5,6,7,8,9]
第4次排序:[1,2,3,4,5,6,7,8,9]
第5次排序:[1,2,3,4,5,6,7,8,9]
1 2 3 4 5 6 7 8 9
2、 選擇排序:把第一個數與他後面的數進行比較,如果順序則繼續與後面比較,如果逆序則兩數交換位置,繼續將第一個數與交換位置後的數進行比較,這樣就完成了第一輪排序。同理將第二位與其後的數比較,直到數組有序爲止。
最好時間複雜度:O(n)
平均時間複雜度:O(n^2)
最壞時間複雜度: O(n^2)
空間複雜度:O(1)
代碼示例
/***
* 選擇排序
* @param array
* @return
*
*/
public static int[] selectSort(int[] array) {
for (int i = 0; i <array.length-1 ; i++) {
int index = i;
for (int j = i+1; j < array.length ; j++) {
if (array[j] < array[index]) {
index =j;//如果有一個小於固定位置的數,就對換位置。
}
}
//如果已經是最小的,就不需要交換
if(index!=i){
int temp =array[index];
array[index] =array[i];
array[i] = temp;
}
}
return array;
}
public static void main(String[] args) {
int[] array = new int[]{3, 2, 5, 8, 1, 9, 4, 6, 7};
selectSort(array);
for (int i : array) {
System.out.print(i + " ");
}
}
排序結果:
第0次排序:[1,2,5,8,3,9,4,6,7]
第1次排序:[1,2,5,8,3,9,4,6,7]
第2次排序:[1,2,3,8,5,9,4,6,7]
第3次排序:[1,2,3,4,5,9,8,6,7]
第4次排序:[1,2,3,4,5,9,8,6,7]
第5次排序:[1,2,3,4,5,6,8,9,7]
第6次排序:[1,2,3,4,5,6,7,9,8]
第7次排序:[1,2,3,4,5,6,7,8,9]
1 2 3 4 5 6 7 8 9