C語言中沒有預(yù)置的sort函數(shù)。如果在C語言中,遇到有調(diào)用sort函數(shù),就是自定義的一個函數(shù),功能一般用于排序。
公司主營業(yè)務(wù):網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出洪洞免費做網(wǎng)站回饋大家。
一、可以編寫自己的sort函數(shù)。
如下函數(shù)為將整型數(shù)組從小到大排序。
void?sort(int?*a,?int?l)//a為數(shù)組地址,l為數(shù)組長度。
{
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函數(shù),可以按照定義的規(guī)范來調(diào)用。
二、C語言有自有的qsort函數(shù)。
功 能: 使用快速排序例程進行排序
頭文件:stdlib.h
原型: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
參數(shù):
1 待排序數(shù)組首地址
2 數(shù)組中待排序元素數(shù)量
3 各元素的占用空間大小
4 指向函數(shù)的指針,用于確定排序的順序
這個函數(shù)必須要自己寫比較函數(shù),即使要排序的元素是int,float一類的C語言基礎(chǔ)類型。
以下是qsort的一個例子:
#includestdio.h
#includestdlib.h
int?comp(const?void*a,const?void*b)//用來做比較的函數(shù)。
{
return?*(int*)a-*(int*)b;
}
int?main()
{
int?a[10]?=?{2,4,1,5,5,3,7,4,1,5};//亂序的數(shù)組。
int?i;
qsort(a,n,sizeof(int),comp);//調(diào)用qsort排序
for(i=0;i10;i++)//輸出排序后的數(shù)組
{
printf("%d\t",array[i]);
}
return?0;
}
擴展資料:
sort函數(shù)的用法(C++排序庫函數(shù)的調(diào)用)
對數(shù)組進行排序,在c++中有庫函數(shù)幫我們實現(xiàn),這們就不需要我們自己來編程進行排序了。
(一)為什么要用c++標準庫里的排序函數(shù)
Sort()函數(shù)是c++一種排序方法之一,學(xué)會了這種方法也打消我學(xué)習(xí)c++以來使用的冒泡排序和選擇排序所帶來的執(zhí)行效率不高的問題!因為它使用的排序方法是類似于快排的方法,時間復(fù)雜度為n*log2(n),執(zhí)行效率較高!
(二)c++標準庫里的排序函數(shù)的使用方法
I)Sort函數(shù)包含在頭文件為#includealgorithm的c++標準庫中,調(diào)用標準庫里的排序方法可以不必知道其內(nèi)部是如何實現(xiàn)的,只要出現(xiàn)我們想要的結(jié)果即可!
II)Sort函數(shù)有三個參數(shù):
(1)第一個是要排序的數(shù)組的起始地址。
(2)第二個是結(jié)束的地址(最后一位要排序的地址的下一地址)
(3)第三個參數(shù)是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個參數(shù),此時默認的排序方法是從小到大排序。
Sort函數(shù)使用模板:
Sort(start,end,排序方法)
下面就具體使用sort()函數(shù)結(jié)合對數(shù)組里的十個數(shù)進行排序做一個說明!
例一:sort函數(shù)沒有第三個參數(shù),實現(xiàn)的是從小到大
#includeiostream
#includealgorithm
using namespace std;
int main()
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i10;i++)
couta[i]endl;
sort(a,a+11);
for(int i=0;i10;i++)
couta[i]endl;
return 0;
}
編譯器
GCC,GNU組織開發(fā)的開源免費的編譯器
MinGW,Windows操作系統(tǒng)下的GCC
Clang,開源的BSD協(xié)議的基于LLVM的編譯器
Visual C++?:: cl.exe,Microsoft VC++自帶的編譯器
集成開發(fā)環(huán)境
CodeBlocks,開源免費的C/C++ IDE
CodeLite,開源、跨平臺的C/C++集成開發(fā)環(huán)境
Orwell Dev-C++,可移植的C/C++IDE
C-Free
Light Table
Visual Studio系列
Hello World
參考資料:百度百科-sort函數(shù)
程序?qū)懙脤嵲谟悬c亂,變量名的聲明與傳遞存在些問題,我?guī)湍愀母模?/p>
#include stdio.h
#define N 5
int a[N];
void init(void);
void compare(void);
void disp(void);
void main()
{
// printf("")
init();
compare();
void disp();
}
void init(void)
{
a[N]={2,1,4,9,5};
}
void compare(void)
{
int i,j,t;
for(i=0;iN;i++)
for(j=i+1;jN;j++)
if(a[i]a[j])
{
t=a[i];
a[i]=a[j]
a[j]=t;
}
}
void disp(void)
{
int i;
for(i=0;iN;i++)
{
printf("%4d",a[i]);
}
}
程序改了很多,為什么?
數(shù)組a 定義為局部變量,你傳遞了卻沒返回,這樣使用不了,我改為了全局變量,這樣不需要傳遞,直接使用就行。
函數(shù)傳遞的另一個變量N 不需要傳遞,因為本身N就是個全局變量,直接使用就行。
還有一些定義了卻沒使用的變量我直接刪了。
你先編譯運行一下,有錯再回復(fù)。
希望我的回答能幫助到你。
c語言通過函數(shù)調(diào)用實現(xiàn)選擇排序法:
1、寫一個簡單選擇排序法的函數(shù)名,包含參數(shù)。int SelectSort(int * ListData,int ListLength);
2、寫兩個循環(huán),在循環(huán)中應(yīng)用簡單選擇插入排序:
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;
}
3、對編好的程序進行測試,得出測試結(jié)果:
int main()
{
int TestData[5] = {34,15,6,89,67};
int i = 0;
printf("排序之前的結(jié)果\n");
for(i = 0;i5;i++)
printf("|%d|",TestData[i]);
int retData = SelectSort(TestData,5);
printf("排序之后的結(jié)果:\n");
for(i = 0;i5;i++)
printf("|%d|",TestData[i]);
return 0;
}
4、簡單選擇排序中,需要移動的記錄次數(shù)比較少,主要的時間消耗在對于數(shù)據(jù)的比較次數(shù)?;旧?,在比較的時候,消耗的時間復(fù)雜度為:n*n。
void?selectionsort(int?a[],int?m)
{
int?i,j;
int?k;
int?tmp;
for(i?=?0;?i??m-1;?i++)//控制循環(huán)次數(shù),n個數(shù)需要n-1次循環(huán)
{
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;
}
}
}
1、打開visual C++ 6.0,準備一個空白的c語言文件,引入頭文件,在main函數(shù)中定義變量和數(shù)組:
2、接下來用scanf函數(shù)輸入的10個數(shù),將輸入的數(shù)存入到變量a中,接著進行比較排序,如果后一個數(shù)比前一個數(shù)大則利用中間變量t實現(xiàn)倆值互換,最后輸出排序的結(jié)果:
3、編譯運行程序,輸入任意的10個數(shù),回車后即可看到排序后的結(jié)果。以上就是c語言中選擇排序的用法: