假設有n個元素,氣泡排序思想是從前往後將相鄰的兩個元素進行比較,如果前者大於後者,交換兩者位置;如果前者小於後者,則不進行任何操作。這樣一次迴圈將最大的乙個數放在最後面,下次迴圈只需對前n-1個元素進行排序,迴圈結束將第二大的數排在倒數第二,依次類推,將n個元素完成排序。
氣泡排序第一次迴圈需要比較n-1次,第二次迴圈比較n-2次…
總共比較的次數為(n-1)+(n-2)+…+1次=n*(n-1)/2次,演算法的時間複雜度為o(n²)。
#include
"stdio.h"
#define n 10
intmain()
;//待排序的n個元素
int b;
//用於兩個變數交換的中間變數
int judgecount =
0, swapcount =0;
//對判斷次數和交換次數進行計數
for(i =
0; i < n-
1; i++
)//第一次進行n-1次兩兩比較,之後每次比較次數-1
judgecount++
;//判斷次數+1}}
for(i =
0; i <
10; i++
)//列印輸出排序結果
printf
("\n氣泡排序共進行了%d次判斷,%d次交換\n"
, judgecount, swapcount)
;}
氣泡排序執行結果:
假設有n個元素,選擇排序思想是先從n個元素中找到最小元素,將其與第乙個元素交換。然後從後n-1個元素中找到最小元素,將其與第二個元素交換,依次類推直到完成排序。
選擇排序第一次迴圈需要比較n-1次,第二次迴圈比較n-2次…
總共比較的次數為(n-1)+(n-2)+…+1次=n*(n-1)/2次,與氣泡排序一樣。但選擇排序在尋找最小元素時可以先把最小元素的下標記錄下來,等本次迴圈結束後再進行交換,減少了交換次數。選擇演算法的時間複雜度同樣為o(n²)。
#include
"stdio.h"
#define n 10
intmain()
;//待排序的n個變數
int b,k;
//b是用於交換的中間變數,k用於儲存最小元素的下標
int judgecount =
0, swapcount =0;
//對判斷次數和交換次數進行計數
for(i =
0; i < n-
1; i++
)//第一次進行n-1次比較,之後每次比較次數-1
judgecount++
;//判斷次數+1}if
(i != k)
//如果i=k,則a[i]與a[k]是同乙個元素,不需要交換
}for
(i =
0; i < n; i++
)//列印輸出排序結果
printf
("\n");
printf
("選擇排序共進行了%d次判斷,%d次交換\n"
, judgecount, swapcount)
;}
選擇排序執行結果:
從執行結果來看氣泡排序與選擇排序判斷次數一樣,但選擇排序交換次數要少於氣泡排序。
假設有n個元素,插入排序思想是將n個元素分為有序部分和無序部分。從無序部分中取出元素插入到有序部分的合適處。
首先將第乙個元素定為有序部分,之後n-1個元素為無序部分。取無序部分第乙個元素,將其與有序部分的元素從後至前乙個乙個進行比較。如果大於該元素,則繼續選擇前乙個元素比較,直到小於該元素或沒有元素可比較,將其插入在該元素前面。隨著排序的進行,有序部分元素越來越多,無序部分元素越來越少,直到全部轉變為有序部分,完成排序。插入排序演算法的時間複雜度為o(n²),但相對於氣泡排序和選擇排序減少了判斷次數。
#include
"stdio.h"
#define n 10
intmain()
;//待排序的n個元素
int b,c;
int judgecount =
0, swapcount =0;
//統計判斷次數,交換次數
for(i =
1; i < n; i++
)//無序部分的元素,迴圈一次減少乙個
if(c != i)
//如果c=i,則b=a[c],不需要進行交換
}for
(i =
0; i < n; i++
)//列印輸出排序結果
printf
("\n共進行了%d次判斷,%d次交換\n"
, judgecount, swapcount)
;}
插入排序執行結果:
快速排序(未完結)
正常的選擇 氣泡排序,時間複雜度為o nn 快速排序 平均為 o n log n 最壞 o nn 就是將陣列按照 其中的乙個元素 基準值 進行分割,分割為兩個部分 大於基準值和小於基準值 因為此時第一次排完序只是將陣列分割,而被分割的部分並不一定是從小到大排序,所以需要下一次的對兩個分割部分在進行各...
Spring總結(未完結)
1.什麼是spring 是乙個輕量級 實現了控制反轉 提供了面向切面的容器框架 spring提供對持久層以及對事務的支援 spring提供mvc web框架的實現,並對一些常用的企業服務api提供一致的模型封裝 spring提供與主流框架的整合方案 2.什麼是依賴注入?什麼是控制反轉?依賴注入 元件...
積累(未完結)
1.輸出字元寬度 include include using namespace std intmain 2.精確到小數點後幾位 include include using namespace std intmain 3.不同資料型別儲存空間大小 include using namespace st...