算法——蠻力法之選擇排序和冒泡排序c++實現


  這次實現的是蠻力法中的兩個例子,選擇排序法和冒泡排序法,使用的編譯環境是vs2013,下面對這兩個算法做一個簡單介紹,然后是兩個算法的c++實現代碼。

  選擇排序法比較的范圍是整個列表,每次掃描結束找出最小的一個元素一次放在前面的位置;而冒泡排序法每次是將相鄰兩個元素進行比較,將較大的元素放在后面,這樣一次掃描結束后就將當前最大的那個元素放在了列表的后面。


 

  兩個排序方法的算法如下:

選擇排序法

  SelectionSort(A[0....n-1])

  //輸入:一個可排序數組A[0....n-1],

  //輸出:升序排序的數組A[0....n-1]

  for    i  <—0  to   n-2   do

    min  <—  i;

    for j <—  i+1  to  n-1    do

      if A[j]  <  A[min]     min  <—j;

        swap A[i] and A[min];

  


 

  該算法的輸入規模就是元素的個數n,基本操作就是if語句中比較的步驟:A[j]  <  A[min],比較的執行次數為:(n-1)n/2,也就是Θ(n2)。


 

  冒泡排序算法:

  BubbleSort(A[0....n-1])

  //輸入:一個可排序數組A[0....n-1]

  //輸出:升序排序的數組A[0....n-1]

  for    i  <—0  to   n-2   do

    for j <—  0  to  n-2-i   do

      if A[j+1]<A[j]  

        swap A[j+1]andA[j]

該算法的時間復雜度和選擇排序的時間復雜度一樣都是Θ(n2)。


#include <iostream>
using namespace std;
void SelectionSort(int iSort[], int n);
void BubbleSort(int iSort[], int n);
void swap(int &a, int &b);
//-------------------主函數------------------- int main(){ int a[10]; for (int i = 0; i < 10; i++){ cin >> a[i]; } getchar(); //SelectionSort(a, 10); //這里傳遞的實參是數組名, //也就是將地址進行傳遞,這樣被調用的函數就能夠改變數組a的值。 BubbleSort(a, 10); for (int i = 0; i < 10; i++){ cout << " " << a[i]; } getchar(); return 1; } //-------------------選擇排序法------------------- void SelectionSort(int iSort[],int n){ int i = 0, j = 0,min=0; for (i = 0; i < n - 1; i++){ min = i; for (j = i + 1; j < n ; j++){ if (iSort[j]<iSort[min]){ //如果要得到降序排列,只要將這里的判斷條件改為if (iSort[j]>iSort[min])即可 min = j; } } swap(iSort[i], iSort[min]); } } //-------------------冒泡排序法------------------- void BubbleSort(int iSort[], int n){ int i = 0, j = 0; for (i = 0; i < n - 1; i++){ for (j = 0; j < n - 1 - i; j++){ if (iSort[j + 1] < iSort[j]){ swap(iSort[j + 1], iSort[j]); } } } } //-------------------交換元素------------------- void swap(int &a, int &b){ int temp; temp = a; a = b; b = temp; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM