比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
針對所有的元素重複以上的步驟,除了最後乙個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
; //對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...