當前位置:首頁 » 編程語言 » c語言排序使用函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言排序使用函數

發布時間: 2023-01-25 05:36:24

『壹』 c語言怎麼使用sort函數,求舉個簡單的例子,謝謝

用 qsort,並且要自己寫比較函數。

例如:有個 int a[1000] 的數組要排序。而比較函數你已經寫好了名字是 comp,則這樣寫:

qsort(a,1000,sizeof(int),comp);

比較函數 comp 如下:

intcomp(constvoid*a,constvoid*b)
{
return*(int*)a-*(int*)b;
}

詳細的可以查一下關於 qsort 的說明。

『貳』 c語言怎麼用自定義函數排序

用冒泡排序法,代碼如下:for(j=0;j<=9;j++)
//10人的總成績進行排序
{
for
(i=0;i<10-j;i++)
if
(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=0;i<10;i++)
//列印排序後的總分{printf("%5d",a[i]);}

『叄』 C語言:輸入5個數,用調用函數的方法,從小到大排序 用簡單點的

#include<stdio.h>

voidsort(float*a,intn)

{

inti,j,tmp;

for(i=0;i<n-1;i++)

for(j=0;j<n-i-1;j++)

if(a[j]>a[j+1])

{

tmp=a[j];

a[j]=a[j+1];

a[j+1]=tmp;

}

}

voidmain()

{

floata[5];

inti;

printf("請輸入五個數(逗號隔開):");

scanf("%f,%f,%f,%f,%f",&a[0],&a[1],&a[2],&a[3],&a[4]);

sort(a,5);

printf("排序後為:");

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

printf("%.2f",a[i]);

printf(" ");

}

或者三個數的。

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;

}

(3)c語言排序使用函數擴展閱讀:

C語言中沒有預置的sort函數。如果在C語言中,遇到有調用sort函數,就是自定義的一個函數,功能一般用於排序。

一、可以編寫自己的sort函數。
如下函數為將整型數組從小到大排序。void sort(int *a, int l)//a為數組地址,l為數組長度。

{

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;

}

}

}

對於這樣的自定義sort函數,可以按照定義的規范來調用。

二、C語言有自有的qsort函數。
功 能: 使用快速排序常式進行排序。頭文件:stdlib.h
原型:

void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));

參數:

1、待排序數組首地址。

2、數組中待排序元素數量。

3、各元素的佔用空間大小4 指向函數的指針,用於確定排序的順序,這個函數必須要自己寫比較函數,即使要排序的元素是int,float一類的C語言基礎類型。

『肆』 C語言中的排序函數是什麼

include <cstdlib> 或 #include <stdlib.h>
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))

參數表
*base: 待排序的元素(數組,下標0起)。
num: 元素的數量。
width: 每個元素的內存空間大小(以位元組為單位)。可用sizeof()測得。
int(*)compare: 指向一個比較函數。*elem1 *elem2: 指向待比較的數據。
比較函數的返回值
返回值是int類型,確定elem1與elem2的相對位置。
elem1在elem2右側返回正數,elem1在elem2左側返回負數。
控制返回值可以確定升序/降序。

產生隨機數的函數也是rand(),不是rank().

『伍』 c語言怎樣通過函數調用實現選擇排序法

c語言通過函數調用實現選擇排序法:

1、寫一個簡單選擇排序法的函數名,包含參數。int SelectSort(int * ListData,int ListLength);

2、寫兩個循環,在循環中應用簡單選擇插入排序:

int SelectSort(int * ListData,int ListLength)

{

int i , j ;

int length = ListLength;

for(i=0;i<=length-2;i++)

{

int k = i;

for(j=i+1;j<=length-1;j++)

{

if(ListData[k]>ListData[j])

{

k=j;

}

}

if(k!=i)

{

int tmp = ListData[i];

ListData[i] = ListData[k];

ListData[k] = tmp;

}

}


return 0;

}

4、簡單選擇排序中,需要移動的記錄次數比較少,主要的時間消耗在對於數據的比較次數。基本上,在比較的時候,消耗的時間復雜度為:n*n。

『陸』 c語言,使用函數的選擇法排序

voidselectionsort(inta[],intm)
{
inti,j;
intk;
inttmp;

for(i=0;i<m-1;i++)//控制循環次數,n個數需要n-1次循環
{
k=i;
for(j=i+1;j<m;j++)
{
if(a[j]<a[k])
k=j;
}
//i不等於k是就證明a[i]不是最小的,
//i等於k時證明a[i]就是本輪比較過程中最小的值
if(i!=k)
{
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}

『柒』 C語言 排序 函數

一群菜鳥不懂的亂說。 我把樓主的代碼改了一些,如下 #include<stdio.h>int input(int data[], int argc, int *n)
{
int i;
printf("請輸入要輸入數的個數");
scanf("%d", n);
if(*n > argc) {
printf("segment fault!");
return -1;
}
for(i = 0; i < *n; i++) {
printf("輸入的第%d個數.", i+1);
scanf("%d", data+i); //canf("%d", &data[i]);
}
printf("輸入的數是:\n");
for(i = 0; i < *n; i++) {
printf("%5d\n", data[i]);
}
return 0;
}void sort(int n, int data[])
{
int i, j, temp;
for(i = 0; i < n-1; i++) {
for(j = i+1; j < n; j++)
if(data[i] < data[j]) {
temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
printf("排序後的結果如下:\n");
for(i = 0; i < n; i++)
printf("%5d\n", data[i]);
}int main()
{
int data[100];
int n;
if(input(data, 100, &n) == -1)
return -1;
sort(n, data);
return 0;
}
對於以上代碼,做出如下解釋:(1)C語言的參數有形參和實參的說法,形參在傳遞到函數內的時候,復制一個副本給函數,在函數內部和外部是兩個完全不同的變數,函數結束,空間也被釋放,所以不能在函數內部來改變外部的值。所以要像樓主這樣用一個函數給一個變數賦值,要用實參int input(int data[], int argc, int *n)中的int *n就是實現形式,這種辦法把n的地址傳遞給函數。當然,在調用函數的時候也同樣要傳遞地址指針類型(&n)。(2)if(*n > argc) {
printf("segment fault!");
return -1;
}這一段是我加進去的,因為按照樓主的意思,data數組的長度也要傳遞進去,但是意思何在?所以只好加了這一段,並把函數改為有類型的,以檢驗是否有數據溢出。(3)scanf("%d", data+i); //scanf("%d", &data[i]);這里我改動的主要原因是為了提升程序速度,scanf("%d", &data[i]);同樣可以運行,但是定址一次,又回頭要地址,這樣繞了一圈,沒有必要。 對於樓主提幾點建議:(1)C語言的精髓在於指針,剛才說到的實參,就是用指針的概念實現的。scanf("%d", data+i); 一行,同樣也是把數組頭指針加上偏移地址,得到所要的地址。(2)C語言編程的時候特別要注意數據的溢出,這是所有初學者頭疼的問題之一。建議在一開始就養成習慣,經常檢驗數組的邊界。(3)void main一看就知道是看潭浩強的書長大的程序員。建議我們都用int main(){ return 0; }的形式,可以看看C語言之父K&R的書。主函數的返回值是告訴操作系統,這個函數是正常退出(返回0),還是異常退出(非0,經常是-1)。(4)在做實際項目的時候,程序經常是要回頭看的,也經常是要給別人看以達到維護的目的的。除了要養成良好的文檔書寫習慣以外(學習軟體工程以後你就會掌握),還要養成良好的編程風格,這里我建議看《thinking in C++》,並按照裡面例題的風格,養成自己的習慣。