C語言重要排序

2021-09-03 10:46:56 字數 2373 閱讀 9347

c語言重要排序

1,氣泡排序 2,選擇排序 3.桶排序。

一,氣泡排序

1、氣泡排序的思想:它重複地走訪需要排序的數列,按照已經規定好的排序順序,每一次比較相鄰兩個元素,如果他們的順序錯誤就把他們交換過來。 直到沒有再需要交換的元素,該數列就排序完成。

2、氣泡排序的演算法運作(由小到大的排列順序

有乙個陣列a[10],用變數i表示它的下標(i從0開始)

比較兩個相鄰元素a[i]和a[i+1],如果a[i]>a[i+1],就交換這兩個數的位置;

重複執行第一步,直到比較到最後一對的時候(例:首次是a[8]和a[9],此 時,a[9]的值為該陣列的最大值,這個值屬於有序數列);

對所有元素(除了有序數列裡的元素),重複執行第一步和第二步,每執行完一次,都會找到當前比較的數里最大的那個(有序數列就會增加乙個);

隨著參與比較的元素越來越少,最終沒有任何一對元素需要比較的時候,排序完成。

傳統的氣泡排序的**:

int a[10000];

int n,i,j;

cin>>n;

for(int i=1;i<=n;i++) //外層迴圈:要比較的次數;}}

優化1——定義乙個flag,用來判斷有沒有進行交換,如果在某次內層迴圈中沒有交換操作,就說明此時陣列已經是有序了的,不用再進行判斷,這樣可以節省時間。

int flag=1;

for(int i=1;i<=n&&flag;i++)}}

二,選擇排序思想:從第乙個數開始,每次和後面剩餘的數進行比較,若公升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置

輸入的序列為9 3 2 5 8 4 7 6進行一次排序後將最小的數放在了第一位(a[0]與它後面的所有數進行比較,若a[0]比後面的數大,進行交換)後面的也是這個道理

附上**

#include int main(void)

}//每排序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置

for(j=0;j可見,線則排序的時間複雜度也為o(n²),我們無法降低它的時間複雜度,但是也可進行優化,每次選擇排序,都需要進行好多次的交換,這樣也比較浪費資源,我們只需要用乙個變數來儲存最小值的下標(公升序排序),最後進行交換,也可以達到目的,這樣會節省很多時間,改進後**如下

for(i=0;ia[j])

k=j;

}//執行過後,k會儲存當前最小值的下標

//進行一次交換

t=a[k];

a[k]=a[i];

a[i]=t;

}

三,桶排序原理很簡單就是利用陣列下標來排序。

桶排序以下列程式進行:

1、設定乙個定量的陣列當作空桶子。

2、尋訪序列,並且把專案乙個乙個放到對應的桶子去。

3、對每個不是空的桶子進行排序。

4、從不是空的桶子裡把專案再放回原來的序列中。

實現**如下:

int n,i,j=0,t;

int b[10001];

scanf("%d",&n);//輸入想要排序的數的個數

memset(b,0,sizeof(b));//對b陣列初始化

for(i=1; i<=n; i++)

for(i=0; i<10001; i++)//從b[0]開始輸出

以上三種為常用排序;但不實用,sort排序更加簡單。

sort預設從小到大排序,

int a[10000],n,i;

for(i=0;i>a[i];

sort(a,a+n); //陣列名,陣列名+排到位數的後乙個數;

如果想實現降序,需要加乙個函式,

bool compare(int a,int b)

當然cmp函式也可以寫的稍微複雜點,也就是說,

按照優先順序對結構體的多個成員按照某種規則排序,

//先按照w的值公升序排序,如果w相等,再按照v的值公升序排序

bool cmp(node a, node b)

//或者這樣寫

bool cmp(node a, node b)

C 語言重要常識

同乙個命名空間可以分散在多個檔案中。位於任何命名空間之外的語法元素都被認為是放在匿名全域性命名空間中的。在同乙個專案中的語法元素可以宣告在多個檔案中,它可以是類 結構或介面。當然它們必須在同乙個命名空間中。define 定義用於條件編譯的符號,為 if elif else及 endif所用。erro...

DML語言(重要)

語法 insert into 表名 欄位1,欄位2,欄位3 value 值1 值2 值3 插入語句 新增 insert into grade gradename values 大四 一般寫插入語句,一定要資料和字段一一對應 插入多個字段 insert into grade gradename val...

c語言重要知識點1

在c語言語言裡面比較重要的知識點有函式 指標 變數 函式 在函式這乙個知識點裡面需要注意的是 1 函式表示式的正確規範的表達形式 void display int num,char p,a,void link int date 等類似的形式 但是其中最主要的有一點需要記住那就是 函式的形參和返回值一...