C語言 氣泡排序函式

2021-10-22 16:57:31 字數 2588 閱讀 7827

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

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

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

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

; //對arr進行排序,排成公升序

int sz = sizeof(arr) / sizeof(arr[0]);

// bubble_sort(arr); //是否可以正常排序?

// arr是陣列,我們對陣列arr進行傳參,實際上傳遞過去的是陣列arr首元素的位址 &arr[0]

bubble_sort(arr,sz); // 氣泡排序函式

問題:只能排序整形陣列

void* 型別的指標 可以接受任意型別的位址

void* 型別的指標 不能進行解引用操作

void* 型別的指標 不能進行±整數的操作

}//比較浮點型

int cmp_float(const void *e1, const void *e2)

void test2()

; int sz = sizeof(f) / sizeof(f[0]);

qsort(f, sz, sizeof(f[0]), cmp_float);

int j = 0;

for (j = 0; j < sz; j++)

}//比較結構體型別

struct stu

;int cmp_stu_by_age(const void *e1, const void *e2)

int cmp_stu_by_name(const void *e1, const void *e2)

void test3()

, , };

int sz = sizeof(s) / sizeof(s[0]);

qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);

//第二個引數:待排序陣列的元素個數

//第三個引數:待排序陣列的每個元素的大小-單位是位元組

}//實現bubble_sort函式的程式設計師,他是否知道未來排序的資料型別-不知道

//那程式設計師也不知道,待比較的兩個元素的型別

void swap(char *buf1, char *buf2, int width)

}//因為首元素型別不同,v所以使用void指標

//sz要排序元素個數

//width每個元素的位元組數

//兩個元素比較的方法不一樣,把比較函式的位址傳進來,e1,e2要比較的元素

void bubble_sort(void *base, int sz, int width, int (*cmp)(void *e1, void *e2))}}

}void test4()

; int sz = sizeof(arr) / sizeof(arr[0]);

//使用bubble_sort的程式設計師一定知道自己排序的是什麼資料

//就應該知道如何比較待排序陣列中的元素

bubble_sort(arr, sz, sizeof(arr[0]), cmp_int);

}void test5()

, , };

int sz = sizeof(s) / sizeof(s[0]);

//bubble_sort(s, sz, sizeof(s[0]), cmp_stu_by_age);

bubble_sort(s, sz, sizeof(s[0]), cmp_stu_by_name);

}int main()

C語言氣泡排序函式

氣泡排序演算法的原理如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。氣泡排序...

C語言 氣泡排序

氣泡排序 兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止 將整個待排序的記錄序列分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄 對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的向後移 像水中的氣泡,體積大的先浮起...

氣泡排序 C語言

c語言是比較簡單基礎的排序方式,排序效率並不高,但是很穩定。通過rand隨機生產10個小於20的數來測試排序。氣泡排序 include include include void bubblesortbetter int a,int n 改進 if flag 0 break void bubbleso...