氣泡排序思想:從陣列的下標為0的元素開始,首先將下標為0的下標與陣列下標為1的元素比較,如果陣列下標1
的元素更小,交換,接著比較下標1與下標2的元素,如果下標2較小則交換,反之接著將下標2與下標3比較。。。
以此類推,經過n-1趟排序就可以得到結果 。
比如5,4,3,2,1
第一趟:5,4比較交換。交換後:4,5,3,2,1
5,3比較交換。交換後:4,3,5,2,1
5,2比較交換。交換後:4,3,2,5,1
5,1比較交換。交換後:4,3,2,1,5
剩下的以此類推
如果是五個數只要四趟迴圈就可以排好,n個資料只要(n-1)趟排序
每一趟排序需要比較的次數,五個數的話第一趟比較4次
第二趟比較3次,因為第一趟已經把最大的元素找到了
所以只要在剩下4個元素中比較3次即可
剩下的以此類推。
時間複雜度:o(n^2) 。
/*氣泡排序思想:從陣列的下標為0的元素開始,首先將下標為0的下標與陣列下標為1的元素比較,如果陣列下標1
的元素更小,交換,接著比較下標1與下標2的元素,如果下標2較小則交換,反之接著將下標2與下標3比較。。。
以此類推,經過n-1趟排序就可以得到結果
時間複雜度:o(n^2)
*/#include#include#includeusing namespace std;
int nums[101];
void bubblesort(int *a,int n)}}
}int main()
{ int n;
cout<<"input n:"<>n;
for(int i = 0;i>nums[i];
bubblesort(nums,n);
for(int i = 0;i
選擇排序思想:每次排序將陣列中最小的元素放到未排序的第乙個
如 3 2 0 5 1
先以陣列首元素為參考值,然後依次與後面的元素比較,有小的將其交換
第二步,從陣列的第二個元素為參考值,然後依次與剩下的元素比較,有小的將其交換 。
比如5,4,3,2,1
第一趟:5為參考值,然後與4比較交換,交換後:4,5,3,2,1
然後以4為參考值,與3比較交換,交換後:3,5,4,2,1
然後以3為參考值,與2比較交換,交換後:2,5,4,3,1
然後以2為參考值,與1比較交換,交換後:1,5,4,3,2
第二趟以此類推
一共進行n-1趟排序,每一趟排序進行n-i-1次排序
後面依次類推 。
時間複雜度為o(n^2) 。
/*選擇排序思想:每次排序將陣列中最小的元素放到未排序的第乙個
如 3 2 0 5 1
先以陣列首元素為參考值,然後依次與後面的元素比較,有小的將其交換
第二步,從陣列的第二個元素為參考值,然後依次與剩下的元素比較,有小的將其交換
後面依次類推
時間複雜度為o(n^2)
*/ #include#include#include#includeusing namespace std;
int a[1000];
void selectionsort(int *a,int n)
{ for(int i = 0;i>n;
for(int i = 0;i>a[i];
selectionsort(a,n);
for(int i = 0;i
插入排序思想:插入排序就是先將陣列首元素不動,從陣列的第乙個開始與前乙個數比較,如果小於當前元素則
交換,反之不作操作,做完這一步操作以後,我們暫且認為陣列的0,1位置排好序,然後用下標為2的元素與前一
個元素(下標1的元素)比較,如果較小則交換,進而再與下標為1的元素的前乙個比較,如果較小則在交換。這
就類似於我們在0,1排好序了而需要將2對應的元素插入到原來排好序的0,1中
比如5,4,3,2,1。
第一趟排序:5與4比較交換變成4,5
第二趟排序:因為4,5排序好了,先將3與5比較交換,再將3與4比較交換。
以此類推一共需要進行n-1趟排序
以此類推
時間複雜度:與陣列的資料狀況有關係
假設是有序的1,2,3,4,5只做比較而不用交換,此時時間複雜度o(n)最好情況
假設是無序的5,4,3,2,1每次都要交換,此時時間複雜度為o(n^2)最壞情況
實際上,插入排序是o(n^2)
/*插入排序思想:插入排序就是先將陣列首元素不動,從陣列的第乙個開始與前乙個數比較,如果小於當前元素則
交換,反之不作操作,做完這一步操作以後,我們暫且認為陣列的0,1位置排好序,然後用下標為2的元素與前一
個元素(下標1的元素)比較,如果較小則交換,進而再與下標為1的元素的前乙個比較,如果較小則在交換。這
就類似於我們在0,1排好序了而需要將2對應的元素插入到原來排好序的0,1中
以此類推
時間複雜度:與陣列的資料狀況有關係
假設是有序的1,2,3,4,5只做比較而不用交換,此時時間複雜度o(n)最好情況
假設是無序的5,4,3,2,1每次都要交換,此時時間複雜度為o(n^2)最壞情況
實際上,插入排序是o(n^2)
*/#include#include#include#includeusing namespace std;
int a[1000];
void insertsort(int *a,int n)
{ for(int i = 0;i=0;j--)
{if(a[j]>n;
for(int i = 0;i>a[i];
insertsort(a,n);
for(int i = 0;i
現在,這三大基礎演算法,冒泡與選擇已經基本不用了,因為效率低,但是插入排序還會繼續用。
因為冒泡與選擇不管陣列的資料是否有序,它都需要進行規定操作時間複雜度為o(n^2)。
而插入排序在陣列有序的情況下根本不用交換時間複雜度為o(n),還是相當可觀的。
在使用基礎演算法排序時,盡可能使用插入排序。
可以關注一下自建blog:
三大經典排序 氣泡排序,選擇排序,快速排序
1.氣泡排序 氣泡排序 bubble sort 最為簡單的一種排序,通過重複走完陣列的所有元素,通過打擂台的方式兩個兩個比較,直到沒有數可以交換的時候結束這個數,再到下個數,直到整個陣列排好順序。因乙個個浮出所以叫氣泡排序。雙重迴圈時間 o n 2 演算法描述 比較相鄰兩個資料如果。第乙個比第二個大...
排序(三)選擇與氣泡排序
在排序中選擇與氣泡排序應該是最基本與入門的 選擇排序 基本思想 在要排序的一組數中,選出最小 或者最大 的乙個數與 第1個位置 的數交換 然後在剩下的數當中再找最小 或者最大 的與 第2個位置 的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。includev...
選擇排序,氣泡排序,雙向氣泡排序
氣泡排序和選擇排序是最基本的排序方式,要掌握。氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。選擇排序每一趟從待排序的 資料元素 中選出最小 或最大 的乙個元素,順序放在已排好序的數列的...