Java之常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
Java面試寶典系列之基礎排序演算法
作者:egg
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖:
給定陣列:int data[] = {9,2,7,19,100,97,63,208,55,78}
一、直接插入排序(內部排序、O(n2)、穩定)
原理:從待排序的數中選出一個來,插入到前面的合適位置。
- package com.xtfggef.algo.sort;
- 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之常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等 .
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖: 給定陣
Java之常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
Java面試寶典系列之基礎排序演算法 作者:egg 郵箱:[email protected] 本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自
Java常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖: 給定陣
Java 常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括:插入排序、選擇排序、氣泡排序、快速排序(重點)、堆排序、歸併排序等等。看下圖:
常見的幾種排序演算法-插入、選擇、冒泡、快排、堆排等
作者:egg 郵箱:[email protected] 本文就是介紹一些常見的排序演算法。排序是一個非常常見的應用場景,很多時候,我們需要根據自己需要排序的資料型別,來自定義排序演算法,但是,在這裡,我們只介紹這些基礎排序演算法,包括
常見幾種排序演算法的C++描述
首先看一下幾種常見排序的特性 插入排序 void insertSort(vector<int> & arr) { int sz = arr.size();
常見的幾種排序演算法(java和C++版)(參考《演算法》)
博主這裡要講的幾種排序演算法包括(從難到易):1.氣泡排序(最low的演算法) 2.插入排序 3.希爾排序 4.歸併排序 5.快速排序 6.快速排序的三項切分 氣泡排序: (1)簡介:這是最原始,最簡單的排序,幾乎不需要額外的空間 (2)基本原理:通過迴圈將最大的元素移到
總結幾種排序演算法的Java實現
1、氣泡排序 氣泡排序是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。 Java程式碼: import java.util.Random; public class BubbleSort { /** * 改進的氣
Java學習之路 幾大排序演算法練習
幾大排序演算法練習 1、各種排序演算法** 氣泡排序 (Bubble Sort) 選擇排序 (Selection Sort) 插入排序 (Insertion Sort) 氣泡排序(Bubble Sort) 基本思想是對比相鄰的元素值,如果滿足條件就交換元
Java常用的八種排序演算法與程式碼實現(一):氣泡排序法、插入排序法、選擇排序法
這三種排序演算法適合小規模資料排序 --- 共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法) 不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 --- 穩定排序演算法:可以保持數值相等的兩個物件,在排序之
11. 常見的有哪幾種排序演算法,試比較其時間複雜度,以及是否穩定,及各自使用的情形
1、幾種常見排序演算法的時間複雜度 排序方法 平均情況 最好情況 最壞情況 直接插入排序 O(n2) O(n) O(n2) 起泡排序 O(n2) O(n) O(n2) 快速排序 O(nlog2n) O(nlog2n)
幾種排序演算法java實現
沒有配圖,過幾天補上 package com.sort; public class Sort { /** * 插入排序 * 原理:往有序的子陣列選擇一個合適的位置插進去 * */ public void insertSort(int sort[
Java中常見的陣列排序演算法(包括冒泡,選擇,插入,快速排序)
1 public static void bubbleSort(int[] arr) { 2 3 for(int x=0; x<arr.length-1; x++) { 4 5 for(int y=0; y<arr.length-x-
幾種排序演算法java版本
很早以前的程式碼了,今天發在這裡備份一下,也供有需要的朋友參考。1. 排序中的數值交換/** * 交換陣列中的兩個值的位置 * @param datas * @param ind1 * @param ind2 */ privat
Java常用的八種排序演算法與程式碼實現(三):桶排序、計數排序、基數排序
三種線性排序演算法:桶排序、計數排序、基數排序 線性排序演算法(Linear Sort):這些排序演算法的時間複雜度是線性的O(n),是非比較的排序演算法 桶排序(Bucket Sort) 將要排序的資料分到幾個有序的桶裡,每個桶裡的資料再單獨進行排序,桶內排完序之後,再把桶裡的
Java常用的八種排序演算法與程式碼實現(二):歸併排序法、快速排序法
注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort): 分而治之,遞迴實現 如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了 歸併排序是穩定的排序演算法,時間
幾種排序演算法,記錄一下
個人也就會四種排序(bubble,select,insert,quick),哈哈,看官大人可能有點失望。自己也看過幾種,不過一直沒寫過其他的,就記錄下這四種吧。 程式碼均可直接通過編譯。各種版本實現都有出入,不過思想都是一樣。工作這麼久還沒有一次性完全寫正確過,功力還是差點。 #includ
【python資料結構與演算法】幾種排序演算法:氣泡排序、快速排序
以下排序演算法,預設的排序結果是從小到大。 一.氣泡排序: 1.氣泡排序思想:越大的元素,就像越大的氣泡。最大的氣泡才能夠浮到最高的位置。 具體來說,即,氣泡排序有兩層迴圈,外層迴圈控制每一輪排序中操作元素的個數——氣泡排序每一輪都會找到遍歷到的元素的最大值,並把它放在最後,下一輪排序時
Java語言實現六種排序演算法
Java語言實現六種排序演算法 Java語言實現六種排序演算法 氣泡排序 插入排序 歸併排序 快速排序 希爾排序 選擇排序
幾種排序演算法
本文轉載自碼農網:http://www.codeceo.com/article/10-sort-algorithm-interview.html#0-tsina-1-10490-397232819ff9a47a7b7e80a40613cfe1 查詢和排