在c語言中,對一組資料進行排列,可以採用冒泡法和選擇法,還有c語言編譯器函式庫自帶的快速排序函式。下面的三部分**,分別採用了qsort,冒泡法排序,以及用冒泡法的原理實現myqsort。
引數分別是:待排序陣列首位址,陣列長度,各元素所佔空間大小,指向函式的指標。
#include
#include
intint_cmp
(const
void
*elem1,
const
void
*elem2)
intmain()
;int i =0;
int len =
sizeof
(arr)
/sizeof
(arr[0]
);qsort
(arr, len,
sizeof
(int
), int_cmp)
;for
(i =
0; i < len; i++
)printf
("\n");
system
("pause");
return0;
}
要提到的一點將**優化。如果一組數本身就是有序的,或這在排序的過程中已經有序了,不需要一直排序到最後一步。**如下:
void
bubble_sort
(int
* arr,
int len)}if
(flag ==0)
}}intmain()
;int i =0;
int len =
sizeof
(arr)
/sizeof
(arr[0]
);bubble_sort
(arr, len)
;for
(i =
0; i < len; i++
)printf
("\n");
system
("pause");
return0;
}
因為myqsort要實現的不僅是int型別的陣列,還有char,double……所以要將其強制轉換為(char*)型別,要換成什麼型別,直接乘size。
//交換函式
void
swap
(const
void
*elem1,
const
void
*elem2,
int size)
}int
int_cmp
(const
void
*elem1,
const
void
*elem2)
void
myqsort
(void
*base,
int len,
int size,
int(
*p)(
const
void
*elem1,
const
void
*elem2))}
}}intmain()
;int i =0;
int len =
sizeof
(arr)
/sizeof
(arr[0]
);myqsort
(arr, len,
sizeof
(int
),int_cmp)
;for
(i =
0; i < len; i++
)printf
("\n");
system
("pause");
return0;
}
冒泡法原理及實現
第一次接觸排序演算法,簡單寫一下實現原理。先看一道例題 使用者輸入十個資料,將資料從大到小輸出。輸入樣例 1 30 23 56 0 199 23 45 78 200 輸出樣例 200 23 0 1 23 30 45 56 78 199 這裡使用冒泡法。別的排序目前我也不太會 示例 includein...
有關qsort的應用以及氣泡排序的實現
功 能 使用快速排序例程進行排序 標頭檔案 stdlib.h 用 法 void qsort void base,size t num,元素個數 size t width,每個元素的大小 int cdecl compare const void elem1,const void elem2 compa...
彙編實現冒泡法排序及優化
冒泡法排序 氣泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或最大的元素 浮 到頂端,最終達到完全有序。但是這種冒泡法排序卻有很大的弊端 可以看見在第一次排序後雖然最大的數字被移動到了最右的位置,但是這輪排序對其他的數字並沒有造成有益的影響,甚至第二大的數字8...