以下是一個使用C語言編寫一維數組排序函數并在主函數中調用的示例代碼,采用的是從小到大排序的方式,可以根據需要進行修改:
成都創(chuàng)新互聯專注于弓長嶺網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供弓長嶺營銷型網站建設,弓長嶺網站制作、弓長嶺網頁設計、弓長嶺網站官網定制、小程序開發(fā)服務,打造弓長嶺網絡公司原創(chuàng)品牌,更為您提供弓長嶺網站排名全網營銷落地服務。
```c
#include stdio.h
// 排序函數,參數為待排序數組和數組長度
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;
// 輸出排序前的數組
printf("排序前:
");
for (i = 0; i len; i++) {
printf("%d ", arr[i]);
}
printf("
");
// 調用排序函數進行排序
sort(arr, len);
// 輸出排序后的數組
printf("排序后:
");
for (i = 0; i len; i++) {
printf("%d ", arr[i]);
}
printf("
");
return 0;
}
```
在上面的代碼中,我們定義了一個`sort`函數,實現了一維數組排序,并接受待排序數組和數組長度為參數。排序的算法采用的是冒泡排序,每次比較相鄰元素的大小并交換它們的位置,直到排序完成。
在主函數中,我們聲明了一個待排序的一維數組`arr`,并計算了數組長度。然后,我們輸出了排序前的數組,并調用`sort`函數進行排序。最后,我們輸出排序后的數組。
需要注意的是,排序函數的實現方式可以有多種,根據實際需求和數據類型的不同,選擇合適的排序算法可以提高排序的效率和準確性。在調用排序函數時,需要確保輸入的參數正確和合法,避免出現數組越界等錯誤。
main()
{
int?i,k,t,a[10]={5,3,1,2,9,4,8,6,0,7};
for(k=1,i=k+2;k8;i=i+2)
{
if(a[k]a[i])
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
if(i==9)
{
k=k+2;
i=k;
}
}
for(i=0;i10;i++)
printf("%d?",a[i]);
printf("\n");
getch();
}
1、冒泡排序(最常用)
冒泡排序是最簡單的排序方法:原理是:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。(注意每一輪都是從a[0]開始比較的)
以從小到大排序為例,第一輪比較后,所有數中最大的那個數就會浮到最右邊;第二輪比較后,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最后實現從小到大排序。
2、雞尾酒排序
雞尾酒排序又稱雙向冒泡排序、雞尾酒攪拌排序、攪拌排序、漣漪排序、來回排序或快樂小時排序, 是冒泡排序的一種變形。該算法與冒泡排序的不同處在于排序時是以雙向在序列中進行排序。
原理:數組中的數字本是無規(guī)律的排放,先找到最小的數字,把他放到第一位,然后找到最大的數字放到最后一位。然后再找到第二小的數字放到第二位,再找到第二大的數字放到倒數第二位。以此類推,直到完成排序。
3、選擇排序
思路是設有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個數中最小的一個。同理,第二輪拿a[2]與a[3]-a[10]比較,a[2]存放a[2]-a[10]中最小的數,以此類推。
4、插入排序
插入排序是在一個已經有序的小序列的基礎上,一次插入一個元素*
一般來說,插入排序都采用in-place在數組上實現。
具體算法描述如下:
⒈ 從第一個元素開始,該元素可以認為已經被排序
⒉ 取出下一個元素,在已經排序的元素序列中從后向前掃描
⒊ 如果該元素(已排序)大于新元素,將該元素移到下一位置
⒋ 重復步驟3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 將新元素插入到下一位置中
⒍ 重復步驟2~5
for(i=0;iN;i++)
//開始外層for循環(huán),從i=0,每次加1,直到i=4
{
//外層循環(huán)體開始
for(j=0;jN-1-i;j++)
//開始外層for循環(huán),從j=0,每次加1直到i等于外層循環(huán)的N-j-1
{
//內層循環(huán)體開始
if(stu[j].sumstu[j+1].sum)
//條件判斷
{
//如果整形數組前面的數比其后的小,執(zhí)行以下語句
temp=stu[j+1.sum];
//將比較大的數賦值給temp
stu[j+1].sum=stu[j].sum;
//將比較小的數賦值給數組中后面的變量
stu[j].sum=temp;
//將比較大的數賦值給數組中前面的變量
}for(i=0;iN;i++)printf("%d%d",stu[i].學號,stu[i].姓名);}