#include?stdio.h
石獅網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,石獅網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為石獅數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的石獅做網(wǎng)站的公司定做!
#include?stdlib.h
#include?time.h
void?sort(int?a[],int?n)
{?int?i,j,t;
for(i=0;?in-1;?i++) //共進行n-1輪
{?for(j=0;?jn-1-i;?j++) //j的范圍:0~n-1-i
if(a[j]a[j+1]) //比較相鄰兩數(shù):a[j]、a[j+1],如不對就交換
{?t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
int?main()
{?int?n,i,a[10000];
scanf("%d",n);
srand(time(0));
for(i=0;?in;?i++)
{?a[i]=rand()%100;
printf("%4d",a[i]);
}
printf("\n");
sort(a,n);
for(i=0;?in;?i++)
printf("%4d",a[i]);
printf("\n");
return?0;
}
#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,10,sizeof(int),comp);//調(diào)用qsort排序??
for(i=0;i10;i++)//輸出排序后的數(shù)組??
{??
printf("%d?",a[i]);??
}??
return?0;??
}
c語言和c++中,對于sort函數(shù)的使用,不同。c語言中沒有預(yù)置的sort函數(shù),如果在c語言中,要調(diào)用sort函數(shù),就需要自定義一個用于排序的函數(shù),或者使用c語言自有的qsort函數(shù),其頭文件為stdlib.h。
1、冒泡排序(最常用)
冒泡排序是最簡單的排序方法:原理是:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數(shù)就會從序列的最右邊冒出來。(注意每一輪都是從a[0]開始比較的)
以從小到大排序為例,第一輪比較后,所有數(shù)中最大的那個數(shù)就會浮到最右邊;第二輪比較后,所有數(shù)中第二大的那個數(shù)就會浮到倒數(shù)第二個位置……就這樣一輪一輪地比較,最后實現(xiàn)從小到大排序。
2、雞尾酒排序
雞尾酒排序又稱雙向冒泡排序、雞尾酒攪拌排序、攪拌排序、漣漪排序、來回排序或快樂小時排序, 是冒泡排序的一種變形。該算法與冒泡排序的不同處在于排序時是以雙向在序列中進行排序。
原理:數(shù)組中的數(shù)字本是無規(guī)律的排放,先找到最小的數(shù)字,把他放到第一位,然后找到最大的數(shù)字放到最后一位。然后再找到第二小的數(shù)字放到第二位,再找到第二大的數(shù)字放到倒數(shù)第二位。以此類推,直到完成排序。
3、選擇排序
思路是設(shè)有10個元素a[1]-a[10],將a[1]與a[2]-a[10]比較,若a[1]比a[2]-a[10]都小,則不進行交換。若a[2]-a[10]中有一個以上比a[1]小,則將其中最大的一個與a[1]交換,此時a[1]就存放了10個數(shù)中最小的一個。同理,第二輪拿a[2]與a[3]-a[10]比較,a[2]存放a[2]-a[10]中最小的數(shù),以此類推。
4、插入排序
插入排序是在一個已經(jīng)有序的小序列的基礎(chǔ)上,一次插入一個元素*
一般來說,插入排序都采用in-place在數(shù)組上實現(xiàn)。
具體算法描述如下:
⒈ 從第一個元素開始,該元素可以認為已經(jīng)被排序
⒉ 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描
⒊ 如果該元素(已排序)大于新元素,將該元素移到下一位置
⒋ 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 將新元素插入到下一位置中
⒍ 重復(fù)步驟2~5
include cstdlib 或 #include stdlib.h
qsort(void* base, size_t num, size_t width, int(*)compare(const void* elem1, const void* elem2))
參數(shù)表
*base: 待排序的元素(數(shù)組,下標0起)。
num: 元素的數(shù)量。
width: 每個元素的內(nèi)存空間大?。ㄒ宰止?jié)為單位)。可用sizeof()測得。
int(*)compare: 指向一個比較函數(shù)。*elem1 *elem2: 指向待比較的數(shù)據(jù)。
比較函數(shù)的返回值
返回值是int類型,確定elem1與elem2的相對位置。
elem1在elem2右側(cè)返回正數(shù),elem1在elem2左側(cè)返回負數(shù)。
控制返回值可以確定升序/降序。
產(chǎn)生隨機數(shù)的函數(shù)也是rand(),不是rank().