C語言踢用函式來實現對任意n個數進行氣泡排序,由主函式進行呼叫並輸出排序結果

2021-05-19 21:03:11 字數 7015 閱讀 2709

1樓:匿名使用者

主要語句段

void sort(); }

然後你在主程式中呼叫就可以了

2樓:匿名使用者

#include(stdio.h)

int main()}}

for(i=0;i

printf("%d",a[i]);}

由主函式呼叫排序子函式,對n個整數進行從小到大的排序,如何用c語言氣泡排序法程式設計?

3樓:倒黴熊

#include

void sort(int a,int n)}}}int main()

;sort(a,10);

int i;

for(i=0;i<10;i++)

getchar();

return 0;}

c語言程式設計——氣泡排序法。要求:由主函式呼叫排序子函式,對n個整數進行從小到大的排序,謝了

4樓:匿名使用者

#include

void sort(int a,int n)}}}int main()

;sort(a,10);

int i;

for(i=0;i<10;i++)

getchar();

return 0;}

5樓:匿名使用者

#include

#define n 10

void paixu(int *arr,int n)}}}void main()

c語言:編寫一個程式,實現氣泡排序,將輸入的n個整數按降序進行排序,並輸出。

6樓:匿名使用者

#include

const int maxsize = 100;

int main() }}

for(i = 0; i < n; ++i)printf("%d ",a[i]);

printf("\n");

}return 0;}

7樓:楊必宇

如圖所示:

short:修飾int,短整型資料,可省略被修飾的int。(k&r時期引入)

long:修飾int,長整型資料,可省略被修飾的int。(k&r時期引入)

long long:修飾int,超長整型資料,可省略被修飾的int。(c99標準新增)

signed:修飾整型資料,有符號資料型別。(c89標準新增)

unsigned:修飾整型資料,無符號資料型別。(k&r時期引入)

restrict:用於限定和約束指標,並表明指標是訪問一個資料物件的唯一且初始的方式。(c99標準新增)

請大神幫忙,寫一下c語言課程作業。 通過定義函式實現氣泡排序過程,拜謝了

c語言將氣泡排序(或選擇排序)改造成函式,實現對一個一維陣列中的元素進行排序

8樓:匿名使用者

/*其實就是把排序封裝成一個函式即可,使用時傳遞陣列的引用便可以實現對陣列元素進行排序了,因為陣列傳遞的就是地址

*/#include

void sort(int a,int n)}}}void main()

//呼叫sort函式排序

sort(a,n);

//輸出測試

for(i=0;i

我想用c語言的指標和函式實現氣泡排序,輸入一就從小到大排序否則就大到。給陣列賦值然後呼叫第一個函式

9樓:c呀可可

沒聽懂你想要表達的意思。所以我把你有可能需要的都貼上:(**是以前寫的,gcc編譯器。有的部分省略了,自行補上。)

排序一維陣列(從大到小,普通自定義函式)

輸入:1,2,3,4,5,6,7,8,9,10輸出:10,9,8,7,6,5,4,3,2,1排序一維陣列(從大到小,指標函式)

輸入:1,2,3,4,5,6,7,8,9,10輸出:10,9,8,7,6,5,4,3,2,1排序二維陣列(沒用函式)

輸入:1  2 3 4

4 2 3 1

4 1 3 2

3 2 4 1

輸出結果為:

1 2 3 4

1 2 3 4

1 2 3 4

1 2 3 4

c語言氣泡排序。

10樓:大野瘦子

#include

void main()

printf("the sorted numbers:\n");

for(i=0;i<10;i++)

printf(" %d",a[i]);

}氣泡排序演算法的運作

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

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

3、針對所有的元素重複以上的步驟,除了最後已經選出的元素(有序)。

4、持續每次對越來越少的元素(無序元素)重複上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。

簡單的表示

#include

void swap(int *i, int *j)int main()

;int i,j;

for (i = 0; i < 10; i++)}}for (i = 0; i < 10; i++)return 0;}

11樓:匿名使用者

//以下以四個數字的給舉例,便於理解;

#include

main()

; //定義陣列,陣列是本次要排序的數字組合;注意此處陣列中一共4個數字所以 理論上是 a[4]=;

//初試化i=1;並判斷i是否小於等於3; 如果符合條件 那麼進入for迴圈;(4個數字,兩兩對比需要進行3輪對比,i就代表了輪數;i需要經過 1,2,3 三輪的賦值;i=4的時候會跳出for迴圈)

for(i=1; i<=3; i++)}}for(i=0; i<4; i++)

}/*執行結果如下:

第 1個數字為:3

第 2個數字為:6

第 3個數字為:10

第 4個數字為:30*/

12樓:鮮日國漢

#include

intmain(void)

;int

t=0;

inti=0,j=0;

for(i=0;i<10;i++)

/*開始冒泡排

序*/for(i=10;i>0;i--)

for(j=0;jnum[j+1])

/*按從小到大*/

}for(i=0;i<10;i++)

/*排序後輸出*/

printf("%d

",num[i]);

getch();

return0;}

13樓:盛京小夥

main() }

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

printf("%5d,",a[i] );

printf("\n");

}--------------

冒泡演算法

氣泡排序的演算法分析與改進

交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。

應用交換排序基本思想的主要排序方法有:氣泡排序和快速排序。

氣泡排序

1、排序方法

將被排序的記錄陣列r[1..n]垂直排列,每個記錄r看作是重量為r.key的氣泡。

根據輕氣泡不能在重氣泡之下的原則,從下往上掃描陣列r:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。

(1)初始

r[1..n]為無序區。

(2)第一趟掃描

從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。即依次比較(r[n],r[n-1]),(r[n-1],r[n-2]),…,(r[2],r[1]);對於每對氣泡(r[j+1],r[j]),若r[j+1].key=i;j--) //對當前無序區r[i..

n]自下向上掃描

if(r[j+1].key

if(!exchange) //本趟排序未發生交換,提前終止演算法

return;

} //endfor(外迴圈)

} //bubblesort

4、演算法分析

(1)演算法的最好時間複雜度

若檔案的初始狀態是正序的,一趟掃描即可完成排序。所需的關鍵字比較次數c和記錄移動次數m均達到最小值:

cmin=n-1

mmin=0。

氣泡排序最好的時間複雜度為o(n)。

(2)演算法的最壞時間複雜度

若初始檔案是反序的,需要進行n-1趟排序。每趟排序要進行n-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:

cmax=n(n-1)/2=o(n2)

mmax=3n(n-1)/2=o(n2)

氣泡排序的最壞時間複雜度為o(n2)。

(3)演算法的平均時間複雜度為o(n2)

雖然氣泡排序不一定要進行n-1趟,但由於它的記錄移動次數較多,故平均時間效能比直接插入排序要差得多。

(4)演算法穩定性

氣泡排序是就地排序,且它是穩定的。

5、演算法改進

上述的氣泡排序還可做如下的改進:

(1)記住最後一次交換髮生位置lastexchange的氣泡排序

在每趟掃描中,記住最後一次交換髮生的位置lastexchange,(該位置之前的相鄰記錄均已有序)。下一趟排序開始時,r[1..lastexchange-1]是有序區,r[lastexchange..

n]是無序區。這樣,一趟排序可能使當前有序區擴充多個記錄,從而減少排序的趟數。具體演算法【參見習題】。

(2) 改變掃描方向的氣泡排序

①氣泡排序的不對稱性

能一趟掃描完成排序的情況:

只有最輕的氣泡位於r[n]的位置,其餘的氣泡均已排好序,那麼也只需一趟掃描就可以完成排序。

【例】對初始關鍵字序列12,18,42,44,45,67,94,10就僅需一趟掃描。

需要n-1趟掃描完成排序情況:

當只有最重的氣泡位於r[1]的位置,其餘的氣泡均已排好序時,則仍需做n-1趟掃描才能完成排序。

【例】對初始關鍵字序列:94,10,12,18,42,44,45,67就需七趟掃描。

②造成不對稱性的原因

每趟掃描僅能使最重氣泡"下沉"一個位置,因此使位於頂端的最重氣泡下沉到底部時,需做n-1趟掃描。

③改進不對稱性的方法

在排序過程中交替改變掃描方向,可改進不對稱性

複製過來的!

14樓:抗婉竭青

本題的一個完整的c程式如下,程式在win-tc和dev-c++下都除錯通過。

#include

#include

#include

void

bubble_sort(int

array)}}

intmain()

bubble_sort(a);

printf("\n\nthe

sequence

after

sort

is:\n");

for(i=0;i<50;i++)

getch();

/*格式rand()%(m-n+1)+n;產生一個n->m區間的隨機數*/}

15樓:性煥老澹

這是優化後的演算法,如果陣列已有序,則沒有執行到

tag=1;所以退出迴圈,避免做無用功

16樓:碎裂什麼捏

#include

int main()

for(i=1;i<=a;i++) }

}for(i=1;i<=a;i++)

return 0;}

17樓:祖任練易蓉

你的程式裡排序時是按照大數存到低地址,

小數存到高地址,輸出時是先輸出高地址,後輸出低地址,所以輸出的數是升序。而有錯位是因為輸出的格式是一個「%d\t」,未給定數值的位寬。即456佔三個字元,而78是兩個字元。

18樓:哇哎西西

氣泡排序的思想:

首先,從表頭開始往後掃描陣列,在掃描過程中逐對比較相領兩個元素的大小。

若相鄰兩個元素中,前面的元素大於後面的元素,則將它們互換, 稱之為清去了一個逆序。在掃描過程中,不斷地將兩相鄰元素中的大者往後移動,最後就將陣列中的最大者換到了表的最後,這正是陣列中最大元素應有的位置。

然後,在剩下的陣列元素中(n-1個元素)重複上面的過程,將次小元素放到倒數第2個位置。不斷重複上述過程,直到剩下的陣列元素為0為止,此時的陣列就變為了有序。假設陣列元素的個數為西,在最壞情況下需要的比較總次數為:

 (n-1)+(n- 2)...+2+1)- n(n-1)/2。

源**如下

冒泡法排序:

#include

int main ()

for (j = 0;j < 9; j++)for (i = 0; i < 9 - j; i++)if (a[i] > a[i+1])

printf ("由小到大的順序為:\n");

for (i = 0; i < 10; i++)printf ("\n");

return 0;

} 執行結果

請輸入十個數:

a[1]=7

a[2]=8

a[3]=9

a[4]=6

a[5]=5

a[6]=4

a[7]=1

a[8]=2

a[9]=3

a[10]=99

由小到大的順序為:

1,2,3,4,5,6,7,8,9,99,

用c語言統計符串中母音字母個數(定義函式來求,也就是說不

include int fun char s int main include include void main int i,j,m,r j strlen p if i 0 i printf d n r 急求!c語言編寫函式實現統計一個字串中字母出現的次數。include include void...

c語言怎麼用函式實現求2的值

返回第i項的資料值i 1時1 3,i 2時,1 3 2 5 double node int i include double f int i int main c語言用公式用這個公式 6 1 1 1 1 2 2 1 3 3 1 n n,求出 的值 10 按照你給出來的公式,6 1 1 1 1 2 2...

用c語言實現hex轉換成ascii的函式

換算成十進位制,c輸出。如何使用c 將hex 轉化成ascii碼 用整型表示,輸出就是10進位制。using namespace std void main c語言將字串轉換成ascii碼陣列的函式是什麼 字串本身就是ascii碼的陣列呀。使用 s列印的就是字串。使用 d一位一位的列印就是ascii...