生活随笔
收集整理的這篇文章主要介紹了
常见的排序算法(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?前言?
📘 博客主頁:to Keep博客主頁
🙆歡迎關注,👍點贊,📝留言評論
?首發時間:2022年2月27日
📨 博主碼云地址:博主碼云地址
📕參考書籍:java核心技術 卷1
📢編程練習:牛客網+力扣網
由于博主目前也是處于一個學習的狀態,如有講的不對的地方,請一定聯系我予以改正!!!
文章目錄
- 🌍排序的相關概念:
- 🌎插入排序
- 🌏 希爾排序
- 🌳 選擇排序
- 🍀 堆排序
- 🌱 冒泡排序
- 源碼地址
🌍排序的相關概念:
1 排序:
就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。
2 穩定性:
兩個相等的數據,如果經過排序后,排序算法能保證其相對位置不發生變化,則我們稱該算法是具備穩定性的排序算法。
例如:
🌎插入排序
插入排序的核心思想就是把數組中的第一個數據是作為有序的,從第二個數據開始,就要與前面的數據進行比較,在合適的位置進行插入;
代碼如下:
public class TestSort {public static void main(String[] args
) {int[] array
= {12,23,43,52,24,64,78,0,1,4};InsertSort(array
);System.out
.println(Arrays.toString(array
));}public static void InsertSort(int[] array
){for (int i
= 1; i
<array
.length
; i
++) {int tmp
= array
[i
];int j
= i
-1;for (;j
>=0;j
--){if(array
[j
]>tmp
){array
[j
+1]=array
[j
];}else{break;}}array
[j
+1]=tmp
;}}
}
**特點:**時間復雜度為O(N)是在數據有序的情況下,所以對于插入排序而言,數據越有序就越快!
🌏 希爾排序
希爾排序其實就是在插入排序的基礎上,進行了優化,它所利用的也是直接插入排序,但是它采用了數據分組的思想,接下來就簡單的來了解一下什么是希爾排序!
代碼如下:
public class TestSort {public static void main(String[] args
) {int[] array
= {12,23,43,52,24,64,78,0,1,4};ShellSort(array
);System.out
.println(Arrays.toString(array
));}public static void Swap(int[] array
,int i
,int j
){int tmp
= array
[i
];array
[i
]=array
[j
];array
[j
]=tmp
;}public static void ShellSort(int[] array
){int gap
= array
.length
;while(gap
!=1){Shell(array
,gap
);gap
=gap
/2;}Shell(array
,1);}public static void Shell(int[] array
,int gap
){for(int i
=gap
;i
<array
.length
;i
++){int tmp
= array
[i
];int j
= i
-gap
;for (;j
>=0;j
-=gap
){if(array
[j
]>tmp
){array
[j
+gap
]=array
[j
];}else{break;}}array
[j
+gap
]=tmp
;}}
}
🌳 選擇排序
選擇排序其實就是,每一次都要將數組中,最小的元素放置到第一位
代碼如下:
public class TestSort {public static void main(String[] args
) {int[] array
= {12,23,43,52,24,64,78,0,1,4};selection(array
);System.out
.println(Arrays.toString(array
));}public static void Swap(int[] array
,int i
,int j
){int tmp
= array
[i
];array
[i
]=array
[j
];array
[j
]=tmp
;}public static void selection(int[] array
){for(int i
= 0;i
<array
.length
;i
++){int minIndex
= i
;for(int j
= i
+1;j
<array
.length
;j
++){if(array
[minIndex
]>array
[j
]){minIndex
=j
;}}if(minIndex
!=i
){Swap(array
,i
,minIndex
);}}}
}
對于選擇排序而言,無論數組是否有序,時間復雜度都為O(N^2)!
🍀 堆排序
堆排序就是就是我們之前講過堆的調整。
代碼如下:
public class TestSort {public static void main(String[] args
) {int[] array
= {12,23,43,52,24,64,78,0,1,4};HeapSort(array
);System.out
.println(Arrays.toString(array
));}public static void Swap(int[] array
,int i
,int j
){int tmp
= array
[i
];array
[i
]=array
[j
];array
[j
]=tmp
;}public static void HeapSort(int[] array
){for(int parent
= (array
.length
-1-1)/2;parent
>=0;parent
--){shiftDown(array
,parent
,array
.length
);}int end
= array
.length
-1;while (end
>0){Swap(array
,0,end
);end
--;shiftDown(array
,0,end
);}}public static void shiftDown(int[] array
,int parent
,int len
){int child
= 2*parent
+1;while (child
<len
){if(child
+1<len
&&array
[child
]<array
[child
+1]){child
++;}if(array
[child
]>array
[parent
]){Swap(array
,parent
,child
);parent
=child
;child
=2*parent
+1;}else{break;}}}
}
堆的詳解
🌱 冒泡排序
冒泡排序的時間復雜度:O(N^2)
空間復雜度:O(1)
穩定性:穩定
圖解冒泡排序
源碼地址
總結
以上是生活随笔為你收集整理的常见的排序算法(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。