本文目錄一覽:
C語言排序有哪些方法 詳細點
排序方法嗎應該和語言沒有太緊密的關係,關鍵看數據類型和結構,一般常用的排序方法有:
1 插入排序——細分的話還可有(1)直接插入排序(2)折半插入排序(3)希爾排序(4)2-路插入排序(5)表插入排序 等
2 比較排序——如冒泡排序,快速排序 等
3 選擇排序——如簡單選擇排序,樹形選擇排序,堆排序 等
4 歸併排序——簡單的如 2-路歸併排序 等
5 基數排序
等等
一般情況下,如果數據不大,只是簡單的自己練習或簡單的幾個十幾個或幾十個數據的話,效率分不出多少來,常用冒泡,直接插入,簡單選擇這幾種簡單的時間複雜度為O(n2)的排序方法就可以。這裡舉一個簡單的小例子——比較排序中的——冒泡排序 如下:
//其中a[]是用於排序的數組變數的首地址,也即數組名,a[0]不放數據,
//用於交換時的輔助存儲空間,數據從a[1]開始存放,n表示存放的數據個數
void bubble_sort(int a[], int n){
int i = 0, j = 0, change = 0;//change用於記錄當前次比較是否進行了交換
for(i = n – 1, change = 1; i = 1 change; i–){//如果change是0,即已經排好序不用再進行比較了
change = 0;//將當前次的change賦值為0,記錄不交換即下次不用比較了
for(j = 1; j = i; j++){//內循環依次將相鄰的兩個記錄進行比較
if(a[j] a[j+1]){//小的前移,最大的移動到本次的最後一項去
a[0] = a[j+1];
a[j+1] = a[j];
a[j] = a[0];
change = 1;//進行了交換的標記
}
}
}
}
C語言中將三個數字進行排序的幾種寫法
方法1:用3個變數存放3個數字,按從大到小的順序排:
int a,b,c,tmp;
printf(“請輸入3個數字:”);
scanf(“%d%d%d”,a,b,c);
if(ab)//如果a比b小,交換a和b的值,使a存放大的數字
{
tmp=a;
a=b;
b=tmp;
}
if(ac)//如果a比c小,交換a和c的值,使a存放大的數字
{
tmp=a;
a=c;
c=tmp;
}
if(bc)//如果b比c小,交換b和c的值,使b存放大的數字
{
tmp=b;
b=c;
c=tmp;
}
printf(“按照從大到小的順序為:%d,%d,%d\n”,a,b,c);
方法2:用數組存放3個變數,用冒泡排序的方法進行排序
int i=0,j=0,tmp=0,a[3];
printf(“請輸入3個數字:”);
for(i=0;i3;i++)
scanf(“%d”,a[i]);
for(i=0;i2;i++)
for(j=0;j2-i;j++)
if(a[i]a[i+1])//按照從大到小排列
{
tmp=a[i];
a[i]=a[i+1];
a[i+1]=tmp;
}
printf(“按照從大到小的順序為:”);
for(i=0;i3;i++)
printf(“%d “,a[i]);
printf(“\n”);
c語言的兩種排序?
1、選擇排序法
要求輸入10個整數,從大到小排序輸出
輸入:2 0 3 -4 8 9 5 1 7 6
輸出:9 8 7 6 5 3 2 1 0 -4
代碼:
#includelt;stdio.hgt;
int main(int argc,const char*argv[]){
int num[10],i,j,k,l,temp;
//用一個數組保存輸入的數據
for(i=0;ilt;=9;i++)
{
scanf(“%d”,numlt;igt;);
}
//用兩個for嵌套循環來進行數據大小比較進行排序
for(j=0;jlt;9;j++)
{
for(k=j+1;klt;=9;k++)
{
if(num[j]lt;num[k])//num[j]lt;num[k]
{
temp=num[j];
num[j]=num[k];
num[k]=temp;
}
}
}
//用一個for循環來輸出數組中排序好的數據
for(l=0;llt;=9;l++)
{
printf(“%d”,num[l]);
}
return 0;
}
2、冒泡排序法
要求輸入10個整數,從大到小排序輸出
輸入:2 0 3-4 8 9 5 1 7 6
輸出:9 8 7 6 5 3 2 1 0-4
代碼:
#includelt;stdio.hgt;
int main(int argc,const char*argv[]){
//用一個數組來存數據
int num[10],i,j,k,l,temp;
//用for來把數據一個一個讀取進來
for(i=0;ilt;=9;i++)
{
scanf(“%d”,numlt;igt;);
}
//用兩次層for循環來比較數據,進行冒泡
for(j=0;jlt;9;j++)
{
for(k=0;klt;9-j;k++)
{
if(num[k]lt;num[k+1])//num[k]lt;num[k+1]
{
temp=num[k];
num[k]=num[k+1];
num[k+1]=temp;
}
}
}
//用一個for循環來輸出數組中排序好的數據
for(l=0;llt;=9;l++)
{
printf(“%d”,num[l]);
}
return 0;
}
擴展資料:
return 0代表程序正常退出。return是C++預定義的語句,它提供了終止函數執行的一種方式。當return語句提供了一個值時,這個值就成為函數的返回值。
return語句用來結束循環,或返回一個函數的值。
1、return 0,說明程序正常退出,返回到主程序繼續往下執行。
2、return 1,說明程序異常退出,返回主調函數來處理,繼續往下執行。return 0或return 1對程序執行的順序沒有影響,只是大家習慣於使用return(0)退出子程序而已。
c語言中排序方法
1、冒泡排序(最常用)
冒泡排序是最簡單的排序方法:原理是:從左到右,相鄰元素進行比較。每次比較一輪,就會找到序列中最大的一個或最小的一個。這個數就會從序列的最右邊冒出來。(注意每一輪都是從a[0]開始比較的)
以從小到大排序為例,第一輪比較後,所有數中最大的那個數就會浮到最右邊;第二輪比較後,所有數中第二大的那個數就會浮到倒數第二個位置……就這樣一輪一輪地比較,最後實現從小到大排序。
2、雞尾酒排序
雞尾酒排序又稱雙向冒泡排序、雞尾酒攪拌排序、攪拌排序、漣漪排序、來回排序或快樂小時排序, 是冒泡排序的一種變形。該演算法與冒泡排序的不同處在於排序時是以雙向在序列中進行排序。
原理:數組中的數字本是無規律的排放,先找到最小的數字,把他放到第一位,然後找到最大的數字放到最後一位。然後再找到第二小的數字放到第二位,再找到第二大的數字放到倒數第二位。以此類推,直到完成排序。
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
C語言把變數輸入到數組排序?
C語言本身是不能的,因為每一個變數的名字在被編譯完後都變成了對應的內存地址,也就是說,編譯後,程序是不知道這個變數叫什麼名字的,因此如果要實現輸出變數的名字,那麼就必須用一個數組來裝這些變數的名字。如圖所示:
c語言排序的方法
排序主要分為以下幾種。
1.冒泡排序:通過循環比較前後數的大小進行交換。最後使得數組有序。
2.快速排序:首先將第一個數作為一個基準,然後循環,將前半部分大於該數的與後半部分小於該數的進行交換,使得以該數為分界線,前面的小於該數,後面的大於該數,然後分前後兩部分繼續。
原創文章,作者:URKZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142203.html