c語言冒泡改進,c語言冒泡排序函數

本文目錄一覽:

c語言 冒泡法是什麼啊

冒泡法是排序的一種方法,冒泡法和冒泡排序實是一個定義.之所以叫冒泡法,即是像在水中的氣泡一樣,在一輪兩數比較之後將最小(或最大的數字)排在一列數的左邊(當然右邊也行,總之是一邊).然後排開這個數,經過N-2排開之後,整列數的大小就是按順序來的.

c語言編程改進冒泡排序,讓冒泡排序一旦排好序就停止循環,提高程序的效率?

#includestdio.h

void bubble_sort_1(int a[],int n)

{ int i,j,x,flag=1;

j=0;

while (flag) // 存在交換,進入循環

{ flag=0; // 初始化,不存在交換

for(i=n-2;i=j;i–)

if(a[i]a[i+1])

{ x=a[i]; a[i]=a[i+1]; a[i+1]=x;

flag=1; // 發現交換,說明無序

}

j++;

}

}

int main(){

}

C語言編程:改進冒泡排序程序,使其當數據已經有序時,直接結束排序過程。請給出運算結果。

#include stdio.h

#include stdlib.h

void Bubble(int *a,int n)  //對n個整數從小到大排序

{int i,j,t,k;

 for(i=0;in-1;i++)

 {k=1;

  for(j=0;jn-1-i;j++)

    if(a[j]a[j+1])

    {k=0;t=a[j];a[j]=a[j+1];a[j+1]=t;}

  if(k)break;  

 }

}

int main()

{int m,i;

 scanf(“%d”,m);

 int *p=(int *)calloc(m,sizeof(int));

 for(i=0;im;i++)

   scanf(“%d”,p+i);

 Bubble(p,m);

 for(i=0;im;i++)  

   printf(“%d “,*(p+i));

return 0;

}

優化的冒泡排序c語言

.example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,”Andale Mono”,”lucida console”,”Courier New”,monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:”courier new”}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,”Andale Mono”,”lucida console”,”Courier New”,monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px} 排序算法是《數據結構與算法》中最基本的算法之一。排序算法可以分為內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸併排序、快速排序、堆排序、基數排序等。以下是冒泡排序算法:

冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢”浮”到數列的頂端。

作為最簡單的排序算法之一,冒泡排序給我的感覺就像 Abandon 在單詞書里出現的感覺一樣,每次都在第一頁第一位,所以最熟悉。冒泡排序還有一種優化算法,就是立一個 flag,當在一趟序列遍歷中元素沒有發生交換,則證明該序列已經有序。但這種改進對於提升性能來

說並沒有什麼太大作用。 1. 算法步驟

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

針對所有的元素重複以上的步驟,除了最後一個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

2. 動圖演示

3. 什麼時候最快

當輸入的數據已經是正序時(都已經是正序了,我還要你冒泡排序有何用啊)。

4. 什麼時候最慢

當輸入的數據是反序時(寫一個 for 循環反序輸出數據不就行了,幹嘛要用你冒泡排序呢,我是閑的嗎)。 5. JavaScript 代碼實現 實例 function bubbleSort ( arr ) {

    var len = arr. length ;

    for ( var i = 0 ; i arr [ j+ 1 ] :

                arr [ j ] , arr [ j + 1 ] = arr [ j + 1 ] , arr [ j ]

    return arr

7. Go 代碼實現 實例 func bubbleSort ( arr [] int ) [] int {

        length := len ( arr )

        for i := 0 ; i length ; i ++ {

                for j := 0 ; j length – 1 – i ; j ++ {

                        if arr [ j ] arr [ j + 1 ] {

                                arr [ j ], arr [ j + 1 ] = arr [ j + 1 ], arr [ j ]

                        }

                }

        }

        return arr

}

8. Java 代碼實現 實例 public class BubbleSort implements IArraySort {

    @Override

    public int [ ] sort ( int [ ] sourceArray ) throws Exception {

        // 對 arr 進行拷貝,不改變參數內容

        int [ ] arr = Arrays . copyOf ( sourceArray, sourceArray. length ) ;

        for ( int i = 1 ; i

C語言的冒泡算法改進

flag=FALSE; /*把flag初始化為false*/

for(j=L-length-1;j=i;j–)

{

if(L-r[j]L-r[j+1])

{

swap(L,j,j+1); /*交換L-r[j]與L-r[j+1]的值*/

flag=TURE; /*如果有數據交換,則flag變為ture*/

}

}

把flag初始化為false,如果有數據交換,則flag變為ture; 反之就是 沒有數據交換。

就是說數據已經是 排序完畢了, 這樣 length flag – flag = false,就是數據已經是 排序完畢,可以退出循環了。

C語言中冒泡法的改進問題

swap變量的設立是檢查

上一輪j的循環中是否存在前面一個數比後面一個數小而進行調換的情況存在.

假如不存在就是排序已經完成.可以不用再使i加1來檢測了.

比如像一開始已經排好序的隊列它就直接退出而不用每次都檢查了.

你可以試着用單步調試的形式來仔細看看swap變量的作用.

原創文章,作者:SEKI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144219.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SEKI的頭像SEKI
上一篇 2024-10-24 15:28
下一篇 2024-10-24 15:28

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字符串操作中,capitalize函數常常被用到,這個函數可以使字符串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機打印函數

    單片機打印是指通過串口或並口將一些數據打印到終端設備上。在單片機應用中,打印非常重要。正確的打印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的打印數據可以幫助我們快速…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29

發表回復

登錄後才能評論