常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
作者:egg
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖:
給定陣列:int data[] = {9,2,7,19,100,97,63,208,55,78}
一、直接插入排序(內部排序、O(n2)、穩定)
原理:從待排序的數中選出一個來,插入到前面的合適位置。
-
package
- publicclass InsertSort {
- staticint data[] = { 9, 2, 7, 19, 100, 97, 63, 208, 55, 78 };
- publicstaticvoid insertSort() {
- int tmp, j = 0;
- for (int k = 0; k < data.length; k++) {//-----1-----
- tmp = data[k];
-
j = k - 1;
- while (j >= 0 && tmp < data[j]) {//-----2-----
- data[j + 1] = data[j];
- j--;
- }
- data[j + 1] = tmp;//------3-------
- }
- }
- publicstaticvoid main(String[] args) {
- print();
-
System.out.println();
- insertSort();
- System.out.println();
- print();
- }
- staticvoid print() {
- for (int i = 0; i < data.length; i++) {
- System.out.print(data[i] + " ");
- }
- }
- }
本排序適合:基本有序的資料
二、選擇排序(O(n2)、不穩定)
與直接插入排序正好相反,選擇排序是從待排序的數中選出最小的放在已經排好的後面,這個演算法選數耗時。
- package com.xtfggef.algo.sort;
- publicclass SelectSort {
- staticint data[] = { 9, 2, 7, 19, 100, 97, 63, 208, 55, 78 };
- publicstaticvoid selectSort() {
- int i, j, k, tmp = 0;
- for (i = 0; i < data.length - 1; i++) {
- k = i;
- for (j = i + 1; j < data.length; j++)
- if (data[j] < data[k])
- k = j;
- if (k != i) {
- tmp = data[i];
- data[i] = data[k];
- data[k] = tmp;
- }
- }
- }
- publicstaticvoid main(String[] args) {
- print();
- System.out.println();
- selectSort();
- System.out.println();
- print();
- }
- staticvoid print() {
- for (int i = 0; i < data.length; i++) {
- System.out.print(data[i] + " ");
- }
- }
- }
三、快速排序(O(nlogn)、不穩定)
快速排序簡稱快排,是一種比較快的排序,適合基本無序的資料,為什麼這麼說呢?下面我說下快排的思路:
設定兩個指標:i和j,分別指向第一個和最後一個,i像後移動,j向前移動,選第一個數為標準(一般這樣做,當然快排的關鍵就是這個“標準”的選取),從後面開始,找到第一個比標準小的數,互換位置,然後再從前面,找到第一個比標準大的數,互換位置,第一趟的結果就是標準左邊的都小於標準,右邊的都大於標準(但不一定有序),分成兩撥後,繼續遞迴的使用上述方法,最終有序!程式碼如下:
- package com.xtfggef.algo.sort;
- publicclass QuickSortTest {
- staticclass QuickSort {
- publicint data[];
- privateint partition(int array[], int low, int high) {
- int key = array[low];
- while (low < high) {
- while (low < high && array[high] >= key)
- high--;
- array[low] = array[high];
- while (low < high && array[low] <= key)
- low++;
- array[high] = array[low];
- }
- array[low] = key;
- return low;
- }
- publicint[] sort(int low, int high) {
- if (low < high) {
- int result = partition(data, low, high);
- sort(low, result - 1);
- sort(result + 1, high);
- }
- return data;
- }
- }
- staticvoid print(int data[]) {
- for (int i = 0; i < data.length; i++) {
- System.out.print(data[i] + " ");
- }
- }
- publicstaticvoid main(String[] args) {
-
int data[] = {
相關推薦
Java常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖: 給定陣
常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
作者:egg 郵箱:[email protected] 本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括
Java之常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等 .
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖: 給定陣
Java之常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
Java面試寶典系列之基礎排序演算法 作者:egg 郵箱:[email protected] 本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自
Java 常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖:
常見幾種排序演算法的C++描述
首先看一下幾種常見排序的特性 插入排序 void insertSort(vector<int> & arr) { int sz = arr.size();
【python資料結構與演算法】幾種排序演算法:氣泡排序、快速排序
以下排序演算法,預設的排序結果是從小到大。 一.氣泡排序: 1.氣泡排序思想:越大的元素,就像越大的氣泡。最大的氣泡才能夠浮到最高的位置。 具體來說,即,氣泡排序有兩層迴圈,外層迴圈控制每一輪排序中操作元素的個數——氣泡排序每一輪都會找到遍歷到的元素的最大值,並把它放在最後,下一輪排序時
11. 常見的有哪幾種排序演算法,試比較其時間複雜度,以及是否穩定,及各自使用的情形
1、幾種常見排序演算法的時間複雜度 排序方法 平均情況 最好情況 最壞情況 直接插入排序 O(n2) O(n) O(n2) 起泡排序 O(n2) O(n) O(n2) 快速排序 O(nlog2n) O(nlog2n)
常見的幾種排序演算法(java和C++版)(參考《演算法》)
博主這裡要講的幾種排序演算法包括(從難到易):1.氣泡排序(最low的演算法) 2.插入排序 3.希爾排序 4.歸併排序 5.快速排序 6.快速排序的三項切分 氣泡排序: (1)簡介:這是最原始,最簡單的排序,幾乎不需要額外的空間 (2)基本原理:通過迴圈將最大的元素移到
幾種排序演算法,記錄一下
個人也就會四種排序(bubble,select,insert,quick),哈哈,看官大人可能有點失望。自己也看過幾種,不過一直沒寫過其他的,就記錄下這四種吧。 程式碼均可直接通過編譯。各種版本實現都有出入,不過思想都是一樣。工作這麼久還沒有一次性完全寫正確過,功力還是差點。 #includ
總結幾種排序演算法的Java實現
1、氣泡排序 氣泡排序是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。 Java程式碼: import java.util.Random; public class BubbleSort { /** * 改進的氣
幾種排序演算法
本文轉載自碼農網:http://www.codeceo.com/article/10-sort-algorithm-interview.html#0-tsina-1-10490-397232819ff9a47a7b7e80a40613cfe1 查詢和排
幾種排序演算法的Python形式
直接見程式碼吧,因為比較簡單 依次為 冒泡 選擇 快排 插入 歸併 堆排 桶排 class Sort: def bubble(self, nums): for i
自我整理:幾種排序演算法的理解
簡單來自己做個筆記,溫故一下排序方法。 1.直接排序 顧名思義,直接排,怎麼直接排,每次迴圈找出最下的扔到第一個,或者找到最大的扔到最後一個,剩下的數字,繼續迴圈找最小的往前扔,暴力排完。簡單粗暴,居家
幾種排序演算法java實現
沒有配圖,過幾天補上 package com.sort; public class Sort { /** * 插入排序 * 原理:往有序的子陣列選擇一個合適的位置插進去 * */ public void insertSort(int sort[
用C++實現七種排序演算法,可選擇排序方法,簡單易懂。
最近學習演算法,先從簡答的開始學起,用C++做了一個實現七種排序演算法的介面,可選擇想要用的選擇演算法,不過,由於時間倉促,沒有來得及優化和程式碼註釋,後期還會加上程式碼註釋,隨便優化一下程式碼,提高執行效率; /***********************
幾種排序演算法實現以及穩定性
穩定性演算法:氣泡排序、插入排序、歸併排序、基數排序 不穩定性演算法:選擇排序、快速排序、堆排序、希爾排序、桶排序 /** * * @author huangsen * 插入排序:一個有序陣列,一個無序陣列,將無序陣列插入到有序陣列中 * */ public
常用幾種排序演算法的時間複雜度和空間複雜度
常用的排序演算法的時間複雜度和空間複雜度 排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(
幾種排序演算法介紹與效能分析
本文以對整形陣列升序排序為例,列舉了排序的幾種演算法及相應的Java實現,並在本文最後給出這幾種演算法的效能分析圖表。 1、插入排序 基本思路:在每次迴圈中把一個元素插入到已經排序的部分序列裡的合適位置,使得到的序列仍然是有序的。 實現: void sort(int a
幾種排序演算法java版本
很早以前的程式碼了,今天發在這裡備份一下,也供有需要的朋友參考。1. 排序中的數值交換/** * 交換陣列中的兩個值的位置 * @param datas * @param ind1 * @param ind2 */ privat