氣泡排序一般來說進行的是n-1次排序(如果n個數需要排序),在每一次的排序中總會找到乙個數在左邊或者右邊,如果設定乙個flag 有的時候就可以大大減少排序的次數
**如下:
#includeusing namespace std;
void bubblesort(int a[6], int len)
} if (flag == false) }}
void print(int a[6])
}int main() ;
print(a);
bubblesort(a, 6);
cout << "氣泡排序後為" << endl;
print(a);
}
1.設定 len -1 次迴圈代表 n-1 次排序,設定j = n - 1 為初值,即要向下排序。
2.找到a[j] 和a[j-1]進行比較,如果a[j-1]>a[j]需要將兩個值進行調換,在本**中第一次內層迴圈過後找到了乙個最小值
3.正常迴圈len-1 趟就可以氣泡排序完成。在**中設定乙個flag初始值為0,只有當在兩個值調換過後,它的值變為1
4.在一次排序後面進行對flag的判斷,如果flag的值沒有變化說明此次排序中沒有進行值的調換,即排序完成。
由圖可知此次進行了兩次排序:
快速排序有4個變數,相比於折半排序沒有了mid這個變數。它用到了兩個函式,其中乙個函式相當於一次排序,另乙個函式遞迴,來實現排序的目的。
#includeusing namespace std;
int floorsort(int a[6], int low, int high)
a[low] = a[high];//如果不大於等於基本值的話就把low下標的值等於high下標的值,執行對low值的操作
while (low < high && a[low] <= blue)
a[high] = a[low]; //如果low的值大於基本值就將現在high下標的值進行賦值
} a[low] = blue; //分配完基本值的左右兩邊以後把 low下標賦值
return low;//返回low下標
}void quicksort(int a[6], int low, int high)
}void print(int a[6])
}int main() ;
print(a);
quicksort(a,0,5);
cout << "快速排序後為" << endl;
print(a);
}
1. 設定單次排序的基本值,首先是從high為下標的數字開始和基本值進行判斷如果大於基本值向前移動,否則將說明此值小於基本值,需要移動到前面的集合中
2.輪到low為下標的值和基本值進行判斷,如果小於基本值向前移動,否則將說明此值大於基本值,需要移動到後面的集合中
3.直到low的值不小於high的值結束,並將low下標賦值,值為基本值。單次函式執行後返回的是low的值
4.在遞迴函式中,分別再次呼叫單次函式,函式執行的是上一次排序中得到的low值的左邊(集合)和low值的右邊(集合)。直到 low>=high 整個快速排序完成
氣泡排序 快速排序 C語言
排序演算法分為內部排序和外部排序,內部排序又分為交換排序 選擇排序 插入排序。今天寫一下交換排序的演算法。交換排序的思想是比較兩個物件的關鍵字,如果這兩個物件的關鍵字發生逆序,則交換這兩個物件的位置。交換排序分為氣泡排序和快速排序。對於氣泡排序 如果待排序的元素有n個,則要進行n 1輪比較,第i輪的...
氣泡排序,插入排序,選擇排序和快速排序 C語言
這篇博文主要用於自己學習的文章梳理,方便以後回憶。first,氣泡排序,演算法的時間複雜度是n n 在資料較多的時候,和快速排序比較執行時間,簡直慢的掉渣,氣泡排序的思想,主要是相鄰兩個元素比較,如果前乙個元素比後乙個元素大,則進行交換,否則繼續後移,知道一次迴圈結束,此時最後乙個元素是序列中最大的...
C 實現快速排序和氣泡排序
快速排序思路 快速排序之所比較快,因為相比氣泡排序,每次交換是跳躍式的。每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊。這樣在每次交換的時候就不會像氣泡排序一樣每次只能在相鄰的數之間進行交換,交換的距離就大的多了。因此總的比較和交換次...