交換排序之--氣泡排序,快速排序
氣泡排序是一種很經典的排序方式了,當然他也是最簡單的一種交換式排序,氣泡排序的思想很簡單,從前面開始,每每兩個數相比,如果前面的大於後面的則交換位置,知道最後一個數,這樣一輪排序下來,最大的數就跑到了最後面,如此往復,知道全部有序。
當然上面是最簡單的氣泡排序,他顯然有一個很大的缺點,就是做了很多的重複勞動,當我們開始排序的時候,實際上整個數列就可以分成有序區和無序區,而根據氣泡排序的特性,有序區裡面已經排好序的數是不用的動的,而根據上面的那種演算法,每次一輪排序的時候都是遍歷整個數列,包括有序區,這就十分浪費時間了。所以優化的方式時,每次一輪排序完,都標記一下這個數的位置,即設定一個有序區的標誌位,這樣下次排序的時候只需要遍歷無序區裡面的數了。
下面是具體的程式碼:
//氣泡排序 public static int[] BubbleSort(int r[],int n){ int exchang=n;//有序區標記位,一開始預設是標記在最後一位 while (exchang!=0) {//還未全部有序時 int bound=exchang;//將標記位賦給bound exchang=0; //一輪氣泡排序 for (int i = 0; i <bound; i++) {//遍歷無序區 if (r[i]>r[i+1]) {//如果前面比後面打,則交換 int buffer=r[i]; r[i]=r[i+1]; r[i+1]=buffer; exchang=i;//更新有序區標記位 } } } return r; }
氣泡排序是一種穩定的排序方式,他的時間複雜度為O(n²)。
同樣屬於交換排序的快速排序是對氣泡排序的一種改進,氣泡排序每次比較都說是相鄰兩個數,也就意味著每一次交換都只移動了一個位置,這就造成了總的比較次數和移動次數比較多,而快速排序則改進了這一缺點,挑一個數為軸,每次挑和他距離最遠的數與他相比,然後交換,這樣小的可以快速被交換到左邊,大的快速被交換到右邊,大大減少了比較次數和移動交換次數。
快速排序的思想是:選擇最左邊的數為軸,先選擇最右邊的數與他比較,如果他大於最右邊的數,則交換位置,此時最左邊的數被交換到最右邊,然後他再找離他最遠的數比較,如果比他大,則交換位置,這樣一輪快速排序下來,比這個軸值大的都跑到他右邊去了,比這個軸值小的都跑到他左邊去了,然後再分別遞迴他左邊和右邊進行快速排序,直到整個數列有序。
快速排序是種不穩定的排序。
相關推薦
Java技術棧(2)排序演算法(冒泡,快速排序)
1.氣泡排序 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端
交換排序之--氣泡排序,快速排序
氣泡排序是一種很經典的排序方式了,當然他也是最簡單的一種交換式排序,氣泡排序的思想很簡單,從前面開始,每每兩個數相比,如果前面的大於後面的則交換位置,知道最後一個數,這樣一輪排序下來,最大的
資料結構——交換排序(氣泡排序,快速排序)
一.氣泡排序 1.原理:比較兩個相鄰的元素,將值大的元素交換至右端。 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前
交換排序(氣泡排序,快速排序)
交換排序 氣泡排序 氣泡排序演算法:顧名思義,就是將最重的(最大元素)浮動到最下面,最輕的(最小元素)浮動到最上面. 演算法過程: 1.迴圈陣列長度length-1次,下標為i. 因為每次迴圈後就會出現一個最大(升序)或最小(降序),只需要比較n-1就
交換排序(氣泡排序,快速排序)
/* 交換排序:氣泡排序,快速排序 執行環境:VS2010 */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h>
各種排序演算法,一步步更新(一),桶排序,氣泡排序,選擇排序,快速排序
部分方法來自我關注的博主 J_小浩子 謝謝 1 桶排序 bucketsort 1 桶排序 #include <stdio.h>//桶排序基本說明 int main(){ int data1[11]={0},tem
python: 選擇排序,氣泡排序,插入排序,快速排序
def selectSort(lyst): n = len(lyst) for i in range(n - 1): minindex = i for j in range(i + 1, n): if lyst[j] <
Java——實現氣泡排序,選擇排序,快速排序和二分查詢
在學習C語言時,對排序演算法和二分查詢有一定的理解並進行了實現。 不過打算用Java重新實現一下氣泡排序(Bubble Sort),選擇排序(Selection Sort),快速排序(Quick Sort)和二分查詢(binary_search)。 package pra
十大排序演算法(氣泡排序,快速排序,插入排序等)
氣泡排序 <1>.比較相鄰的元素。如果第一個比第二個大,就交換它們兩個; <2>.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數; <3>.針對所有的元素重複以上的步驟,除了最後一個; <4>.
常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序
快速排序 public class QuickSort { public void qSort(int[] arr,int left,int right) { if(left>right) { return ; } int i = le
Java語言陣列排序——氣泡排序,選擇排序,快速排序,直接插入排序
今天主要來說下陣列排序的問題,主要介紹的有氣泡排序,選擇排序,快速排序,直接插入排序四種排序: 1.氣泡排序: 主要有原理圖與程式碼解釋; 原理圖借鑑一位老師畫的圖,嘻嘻,老師畫的圖比較好看,就拿來借鑑下: 2.選擇排序 3.快速排序 4.直接插
python: 選擇排序,氣泡排序,插入排序,快速排序
def selectSort(lyst): n = len(lyst) for i in range(n - 1): minindex = i for j in range(i + 1, n): if l
各種排序演算法的場景以及c++實現(插入排序,希爾排序,氣泡排序,快速排序,選擇排序,歸併排序)
對現有工作並不是很滿意,所以決定找下一個坑。由工作中遇到排序場景並不多,大都是用氣泡排序,太low,面試又經常問到一些排序演算法方面的東西。剛好讓小學妹郵的資料結構也到了。就把各種排序演算法重新總結一下,以作留存。 排序分為內部排序和外部排序,內部排序是在記憶體中排序。外
三種排序法的練習題(桶排序,氣泡排序,快速排序)
小哼買書的三種解法 題目:要登記買書的同學,人數小於100,每個人報一個ISBN碼,範圍在1~1000;去掉重複的, 並將ISBN碼從小大排列 1、桶排序,時間複雜的都為O(n+m),佔空間大
排序演算法【動畫】詮釋排序過程【一】【氣泡排序,選擇排序,插入排序,歸併排序,快速排序】
目錄 語言:c# 1. 氣泡排序(bubble sort) 每一次排序過程: 介紹:氣泡排序是一種最簡單的排序演算法。氣泡排序得名與鍵值較小的元素如同“氣泡”一樣逐漸到序列的頂端。 優點:最簡單的排序演算法, 缺點: 慢,每次只能
插入排序,希爾排序,選擇排序,快速排序,氣泡排序,歸併排序
插入排序 1、介紹: 簡單插入排序演算法原理:從整個待排序列中選出一個元素插入到已經有序的子序列中去,得到一個有序的、元素加一的子序列,直到整個序列的待插入元素為0,則整個序列全部有序。 在實際的演算法中
經典排序演算法,氣泡排序,選擇排序,直接插入排序,希爾排序,快速排序,歸併排序,二分查詢。原理及python實現。
1.氣泡排序 氣泡排序 1.比較相鄰的元素,如果第一個比第二個大(升序),就交換他們兩個 2.對每一對相鄰的元素做同樣的工作,從開始到結尾的最後一對 這步做完後,最後的元素會是最大的數 3.針對所有的元素重複以上的步驟,除了最
java實現各種排序演算法(包括氣泡排序,選擇排序,插入排序,快速排序(簡潔版))及效能測試
1、氣泡排序是排序裡面最簡單的了,但效能也最差,數量小的時候還可以,數量一多,是非常慢的。 它的時間複雜度是O(n*n),空間複雜度是O(1) 程式碼如下,很好理解。 public static void bubbleSort(int[] arr)
必須掌握的八種排序(5-6)--氣泡排序,快速排序
5、氣泡排序 (1)基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 (2)理解圖
氣泡排序,快速排序,堆排序,歸併排序
1.氣泡排序(1)基本思想:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(最小)的資料元素交換到了無序序列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於:每次通過兩兩比較交換位置。選出剩餘無序序列裡最大(