#includestdio.h
成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)的開發(fā),更需要了解用戶,從用戶角度來(lái)建設(shè)網(wǎng)站,獲得較好的用戶體驗(yàn)。創(chuàng)新互聯(lián)公司多年互聯(lián)網(wǎng)經(jīng)驗(yàn),見的多,溝通容易、能幫助客戶提出的運(yùn)營(yíng)建議。作為成都一家網(wǎng)絡(luò)公司,打造的就是網(wǎng)站建設(shè)產(chǎn)品直銷的概念。選擇創(chuàng)新互聯(lián)公司,不只是建站,我們把建站作為產(chǎn)品,不斷的更新、完善,讓每位來(lái)訪用戶感受到浩方產(chǎn)品的價(jià)值服務(wù)。
void?sort(float?*a,?int?n)
{
int?i,j,tmp;
for(i=0;?in-1;?i++)
for(j=0;?jn-i-1;?j++)
if(a[j]a[j+1])
{
tmp?=?a[j];
a[j]?=?a[j+1];
a[j+1]?=?tmp;
}
}
void?main()
{
float?a[5];
int?i;
printf("請(qǐng)輸入五個(gè)數(shù)(逗號(hào)隔開):");
scanf("%f,%f,%f,%f,%f",a[0],a[1],a[2],a[3],a[4]);
sort(a,5);
printf("排序后為:");
for(i=0;?i5;?i++)
printf("%.2f?",a[i]);
printf("\n");
}
或者三個(gè)數(shù)的。
void sort(int *a, int *b, int *c)
{
int tmp;
if(*a*b){
tmp = *b;
*b = *a;
*a = tmp;
}
if(*a*c){
tmp = *c;
*c = *a;
*a = tmp;
}
if(*b*c){
tmp = *c;
*c = *b;
*b = tmp;
}
return;
}
擴(kuò)展資料:
C語(yǔ)言中沒有預(yù)置的sort函數(shù)。如果在C語(yǔ)言中,遇到有調(diào)用sort函數(shù),就是自定義的一個(gè)函數(shù),功能一般用于排序。
一、可以編寫自己的sort函數(shù)。
如下函數(shù)為將整型數(shù)組從小到大排序。void sort(int *a, int l)//a為數(shù)組地址,l為數(shù)組長(zhǎng)度。
{ ?
int i, j; ?
int v; ? ?//排序主體
for(i = 0; i l - 1; i ++) ? ? ?
for(j = i+1; j l; j ++)
?
{ ? ? ? ? ?
if(a[i] a[j])//如前面的比后面的大,則交換。
? ? ?
{
? ? ? ? ?
v = a[i];
? ? ? ? ?
a[i] = a[j];
? ? ? ? ?
a[j] = v;
? ? ?
}
?
}
}
對(duì)于這樣的自定義sort函數(shù),可以按照定義的規(guī)范來(lái)調(diào)用。
二、C語(yǔ)言有自有的qsort函數(shù)。
功 能: 使用快速排序例程進(jìn)行排序。頭文件:stdlib.h
原型:
void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
參數(shù):
1、待排序數(shù)組首地址。
2、數(shù)組中待排序元素?cái)?shù)量。
3、各元素的占用空間大小4 指向函數(shù)的指針,用于確定排序的順序,這個(gè)函數(shù)必須要自己寫比較函數(shù),即使要排序的元素是int,float一類的C語(yǔ)言基礎(chǔ)類型。
#include stdio.h
#include stdlib.h
#include time.h
#define MAXlen 100
void select_sort(int *x, int n) { //選擇排序
int i, j, min;
int t;
for (i = 0; i n - 1; i++) { // 要選擇的次數(shù):0~n-2共n-1次
min = i; // 假設(shè)當(dāng)前下標(biāo)為i的數(shù)最小,比較后再調(diào)整
for (j = i + 1; j n; j++) { //循環(huán)找出最小的數(shù)的下標(biāo)是哪個(gè)
if (*(x + j) *(x + min)) {
min = j; // 如果后面的數(shù)比前面的小,則記下它的下標(biāo)
}
}
if (min != i) { // 如果min在循環(huán)中改變了,就需要交換數(shù)據(jù)
t = *(x + i);
*(x + i) = *(x + min);
*(x + min) = t;
}
}
}
int main() {
int i;
int iArr[MAXlen];
srand((unsigned int)time(NULL));
printf("\n排序前:\n");
for(i = 0 ; i MAXlen ; i++) {
iArr[i] = (unsigned int)rand() % 1000;
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n");
select_sort(iArr,MAXlen);
printf("\n排序后:\n");
for(i = 0 ; i MAXlen ; i++) {
if(i % 10 == 0) printf("%\n");
printf("%5d",iArr[i]);
}
printf("\n\n");
return 0;
}
以下是一個(gè)使用C語(yǔ)言編寫一維數(shù)組排序函數(shù)并在主函數(shù)中調(diào)用的示例代碼,采用的是從小到大排序的方式,可以根據(jù)需要進(jìn)行修改:
```c
#include stdio.h
// 排序函數(shù),參數(shù)為待排序數(shù)組和數(shù)組長(zhǎng)度
void sort(int arr[], int len) {
int i, j, tmp;
// 冒泡排序
for (i = 0; i len - 1; i++) {
for (j = 0; j len - i - 1; j++) {
if (arr[j] arr[j + 1]) { // 相鄰元素比較,如果前面的大于后面的,則交換位置
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main() {
int arr[] = { 3, 1, 5, 7, 2, 4, 6 };
int len = sizeof(arr) / sizeof(int);
int i;
// 輸出排序前的數(shù)組
printf("排序前:
");
for (i = 0; i len; i++) {
printf("%d ", arr[i]);
}
printf("
");
// 調(diào)用排序函數(shù)進(jìn)行排序
sort(arr, len);
// 輸出排序后的數(shù)組
printf("排序后:
");
for (i = 0; i len; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
```
在上面的代碼中,我們定義了一個(gè)`sort`函數(shù),實(shí)現(xiàn)了一維數(shù)組排序,并接受待排序數(shù)組和數(shù)組長(zhǎng)度為參數(shù)。排序的算法采用的是冒泡排序,每次比較相鄰元素的大小并交換它們的位置,直到排序完成。
在主函數(shù)中,我們聲明了一個(gè)待排序的一維數(shù)組`arr`,并計(jì)算了數(shù)組長(zhǎng)度。然后,我們輸出了排序前的數(shù)組,并調(diào)用`sort`函數(shù)進(jìn)行排序。最后,我們輸出排序后的數(shù)組。
需要注意的是,排序函數(shù)的實(shí)現(xiàn)方式可以有多種,根據(jù)實(shí)際需求和數(shù)據(jù)類型的不同,選擇合適的排序算法可以提高排序的效率和準(zhǔn)確性。在調(diào)用排序函數(shù)時(shí),需要確保輸入的參數(shù)正確和合法,避免出現(xiàn)數(shù)組越界等錯(cuò)誤。
void sort(int a[])
這樣不行的,還需要知道數(shù)組的大小
數(shù)組作為形參的時(shí)候弱化為指針
int size=sizeof(a)/sizeof(int);
這樣得到的size=1;
void sort(int a[], int n);
然后冒泡就可以了