程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話冒泡排序算完成代碼

C說話冒泡排序算完成代碼

編輯:關於C++

C說話冒泡排序算完成代碼。本站提示廣大學習愛好者:(C說話冒泡排序算完成代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話冒泡排序算完成代碼正文


冒泡排序是排序算法的一種,思緒清楚,代碼簡練,常被用在年夜先生盤算機課程中。

“冒泡”這個名字的由來是由於越年夜的元素會經過交流漸漸“浮”到數列的頂端,故名。

這裡以從小到年夜排序為例停止講授。

根本思惟及舉例解釋

冒泡排序的根本思惟就是赓續比擬相鄰的兩個數,讓較年夜的元素赓續地往後移。經由一輪比擬,就選出最年夜的數;經由第2輪比擬,就選出次年夜的數,以此類推。

上面以對 3  2  4  1 停止冒泡排序解釋。

第一輪 排序進程
3  2  4  1    (最後)
2  3  4  2    (比擬3和2,交流)
2  3  4  1    (比擬3和4,不交流)
2  3  1  4    (比擬4和1,交流)
第一輪停止,最年夜的數4曾經在最初面,是以第二輪排序只須要對後面三個數停止再比擬。

第二輪 排序進程
2  3  1  4 (第一輪排序成果)
2  3  1  4 (比擬2和3,不交流)
2  1  3  4 (比擬3和1,交流
第二輪停止,第二年夜的數曾經排在倒數第二個地位,所以第三輪只須要比擬前兩個元素。

第三輪 排序進程
2  1  3  4  (第二輪排序成果)
1  2  3  4  (比擬2和1,交流)

至此,排序停止。

算法總結及完成

關於具有N個元素的數組R[n],停止最多N-1輪比擬;

第一輪,逐一比擬(R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-1], R[N]) ;  最年夜的元素會被挪動到R[N]上。

第二輪,逐一比擬(R[1], R[2]),  (R[2], R[3]),  (R[3], R[4]),  …….  (R[N-2], R[N-1]);第二年夜元素會被挪動到R[N-1]上。

。。。。

以此類推,直到全部數組從小到年夜排序。

上面給出了冒泡排序的普通完成和優化完成。普通完成是教科書裡罕見的完成辦法,不管數組能否排序好了,都邑停止N-1輪比擬; 而優化完成,在數組曾經排序好的情形下,會提早加入比擬,減小了算法的時光龐雜度。

#include<stdio.h>
#include<stdlib.h>
#define N 8
void bubble_sort(int a[],int n);
//普通完成
void bubble_sort(int a[],int n)//n為數組a的元素個數
{
  //必定停止N-1輪比擬
  for(int i=0; i<n-1; i++)
  {
    //每輪比擬前n-1-i個,即已排序好的最初i個不消比擬
    for(int j=0; j<n-1-i; j++)
    {
      if(a[j] > a[j+1])
      {
        int temp = a[j];
        a[j] = a[j+1];
        a[j+1]=temp;
      }
    }
  }
}
//優化完成
void bubble_sort_better(int a[],int n)//n為數組a的元素個數
{
  //最多停止N-1輪比擬
  for(int i=0; i<n-1; i++)
  {
    bool isSorted = true;
    //每輪比擬前n-1-i個,即已排序好的最初i個不消比擬
    for(int j=0; j<n-1-i; j++)
    {
      if(a[j] > a[j+1])
      {
        isSorted = false;
        int temp = a[j];
        a[j] = a[j+1];
        a[j+1]=temp;
      }
    }
    if(isSorted) break; //假如沒有產生交流,解釋數組曾經排序好了
  }
}
int main()
{
  int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};
  bubble_sort(num, N); //或許應用bubble_sort_better(num, N);
  for(int i=0; i<N; i++)
    printf("%d ", num[i]);
  printf("\n");
  system("pause");
  return 0;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved