當前位置:首頁 » 編程語言 » c語言簡單排序

c語言簡單排序

發布時間: 2022-04-26 15:33:28

c語言中三個數排序

用C語言編寫通過if將3個數排序:

#include<stdio.h>/*函數頭:輸入輸出頭文件*/

void main()/*空類型:主函數*/

{

inta,b,c,t;/*定義變數的數據類型為整型*/

printf("輸入3個數,中間用空格隔開:");/*輸出文字提示*/

scanf("%d%d%d",&a,&b,&c);/*輸入3個數字*/

if(a<b)/*判斷a是否小於b*/

{t=a;a=b;b=t;}/*是,則a、b的值互換*/

if(a<c)/*判斷a是否小於c*/

{t=a;a=c;c=t;}/*是,則a、c的值互換*/

if(b<c)/*判斷b是否小於c*/

{t=b;b=c;c=t;}/*是,則b、c的值互換*/

printf("從小到大:%d,%d,%d ",c,b,a);/*輸出從小到大排列的數*/

printf("從大到小:%d,%d,%d ",a,b,c);/*輸出從大到小排列的數*/

}

(1)c語言簡單排序擴展閱讀

輸入三個數,比較其大小,並從大到小輸出。

#include<stdio.h>

int main(){

inta,b,c;

scanf("%d%d%d",&a,&b,&c);

if(a<b){

intflag=a;

a=b;

b=flag;

}

if(a<c){

intflag=a;

a=c;

c=flag;

}

if(b<c){

intflag=b;

b=c;

c=flag;

}

printf("%d%d%d",a,b,c);

}

⑵ C語言排序的方法

現在流行的排序有:直接插入排序、冒泡排序、簡單選擇排序、希爾排序、快速排序、堆排序、歸並排序、基數排序。

對n個記錄進行選擇排序的方法是:通過n-i次關鍵字之間的比較,從n-i+1個記錄中選出關鍵字最小的記錄,並和第i(1<=i<=n)個記錄進行交換,當i等於n時所有記錄都已有序排列。

void selectsort(int data[],int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(data[j]<data[k]) k=j;
if(k!=i)
{
temp=data[i];data[i]=data[k];data[k]=temp;
}//if
}//for
}//for
}//selectsort

⑶ c語言簡單的排序問題

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#defineSWAP(x,y){intt;t=x;x=y;y=t;}
#defineMAX10
voidsort(intnumber[],intleft,intright);
intquicksort(intnumber[],intleft,intright);
intmain(){
intnumber[MAX],i;
srand(time(0));
for(i=0;i<MAX;i++){
number[i]=(int)rand()%100;
}
printf("請輸出排排列前的數: ");
for(i=0;i<MAX;i++)
printf("%3d",number[i]);
printf(" ");
sort(number,0,MAX-1);//函數調用
printf("請輸出排排列後的數: ");
for(i=0;i<MAX;i++)
printf("%3d",number[i]);
printf(" ");
return0;
}

intquicksort(intnumber[],intleft,intright){
inti,s,j;
i=left-1;
s=number[right];
for(j=left;j<right;j++){
if(number[j]<=s){
i++;
SWAP(number[i],number[j]);
}
}
SWAP(number[i+1],number[right]);
return(i+1);
}

voidsort(intnumber[],intleft,intright){
intq;
if(left<right){
q=quicksort(number,left,right);
sort(number,left,q-1);//注意這里
sort(number,q+1,right);//注意這里
}
}


好好貼代碼會死嗎……

⑷ c語言排序法

這是簡單選擇排序。但你圖中的是未經優化的,因為移動次數和比較次數的時間復雜度都是O(n²),而優化了的選擇排序的移動次數的時間復雜度最優可以達到O(n)
如下圖參考自《數據結構(C語言版)》——清華大學出版社


如圖,如有疑問或不明白請追問哦!

⑸ C語言10種排序方法

1.比較法2.選擇排序3.冒泡排序4.希爾排序5.快速排序6.堆排序7.合並排序8.基數排序9.折半插入排序10.直接插入排序

⑹ C語言 簡單的從大到小排序問題

這是冒泡排序法。

第一個循環的控制變數應該是 i < N - 1 ,也就是 兩兩比較的 前一個數 最多隻到 倒數第二個;

而 第二個 循環的控制變數應該是 j < N ,表示 兩兩比較的後一個數, 要直到最後一個數。

如有幫助,煩請點採納,謝謝!

⑺ 如何用C語言編寫一個排序程序

樓上的用的是C++
若單純的用C那就是這樣
#include<stdio.h>
#define
print
"NO.%d
%d
%d
%d
%d
%3.2f
%3.2f\n",1+i,stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com,stu[i].aver,stu[i].total//宏定義節約時間
struct
student
{
int
num;
int
mat;
int
ENG;
int
com;
float
aver;
float
total;
}stu[10];//定義結構體變數
void
main()
{
int
i;
void
take_turn_print(struct
student
stu1[10])
;
float
sum(int
x,int
y,int
z);//聲明求和函數
for(i=0;i<10;i++)
scanf("%d%d%d%d",&stu[i].num,&stu[i].mat,&stu[i].ENG,&stu[i].com);
for(i=0;i<10;i++)
{
stu[i].total=sum(stu[i].mat,stu[i].ENG,stu[i].com);//調用求和函數
stu[i].aver=stu[i].total/3;
}
take_turn_print(stu);//調用排序
列印函數
}
void
take_turn_print(struct
student
stu1[10])
{
void
change(int
*x,int
*y);//聲明換位函數
void
change1(float
*x,float
*y);//聲明換位函數
int
i,j;
for(j=0;j<9;j++)//冒泡排序
為理解簡單
就沒用別的排序方法
哈哈
{
for(i=0;i<9-j;i++)
{
if(stu1[i].aver<stu1[i+1].aver)
{
change(&stu1[i].num,&stu1[i+1].num);//
值交換
change(&stu1[i].mat,&stu1[i+1].mat);//
值交換
change(&stu1[i].ENG,&stu1[i+1].ENG);//
值交換
change(&stu1[i].com,&stu1[i+1].com);//
值交換
change1(&stu1[i].aver,&stu1[i+1].aver);//
值交換
change1(&stu1[i].total,&stu1[i+1].total);//
值交換
}
}
}
for(i=0;i<10;i++)
printf(print);//列印
}
void
change(int
*x,int
*y)
{
int
i;
i=*x;
*x=*y;
*y=i;//利用指針做變數替換
}
void
change1(float
*x,float
*y)
{
float
i;
i=*x;
*x=*y;
*y=i;//利用指針做變數替換
}
float
sum(int
x,int
y,int
z)
{
float
i;
i=(float)(x+y+z);
return(i);
}
前幾天也是幫同學做這樣的題
一模一樣
看來你也是WH大學的

⑻ C語言選擇法排序

#include<stdio.h>

#defineM 5

void main()

{

int b[M],i,j,t,k;

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

scanf("%d",&b[i]);

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

{

for(k=i,j=i+1;j<M;j++)

if(b[k]<b[j])

k=j;

if(i!=k)

{

t=b[i];

b[i]=b[k];

b[k]=t;

}

}

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

printf("%d ",b[i]);

}

錯在大括弧位置加錯了。

代碼:

#include<stdio.h>

void SelectionSort(int *num,int n)

{

int i = 0;

int min = 0;

int j = 0;

int tmp = 0;

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

{

min = i;//每次講min置成無序組起始位置元素下標

for(j = i;j < n;j++)//遍歷無序組,找到最小元素。

{

if(num[min]>num[j])

{

min = j;

}

}

if(min != i)//如果最小元素不是無序組起始位置元素,則與起始元素交換位置

{

tmp = num[min];

num[min] = num[i];

num[i] = tmp;

}

}

}

(此處空一行)

int main()

{

int num[6] = {5,4,3,2,9,1};

int i = 0;

SelectionSort(num,6);//這里需要將數列元素個數傳入。有心者可用sizeof在函數內求得元素個數。

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

{

printf("%d ",num[i]);

}

return 0;

}

⑼ C語言中有哪些經典的排序方法

選擇排序的原理是,每次從待排序數字中挑選出最大(最小)數字,放在有序序列的末尾。實際操作中,只需要在這個數組中將挑出來的數字與前面的數字交換即可。

例如:

4
1 5
2 3

找到最小的1,1和4交換

1
4 5
2
3

找到最小的2,2和4交換

1
2
5
4
3

找到最小的3,3和5交換

1
2
3
4
5

找到最小的4,4和4交換(不交換也可)

可見,選擇排序需要一個雙重循環來完成,因此它的復雜度是o(n^2)

在數據量比較大時,不建議使用這種排序方法。

其他排序方法有很多,你甚至可以自己根據不同數據規模設計不同的排序方法。比較常見的有冒泡排序,插入排序(這兩種和選擇排序一樣,都是o(n^2)),二分法插入排序(降低了一些復雜度,但是涉及到大規模數據移動,效率依然不高),快速排序(平均復雜度o(nlogn),但是不穩定,最壞情況o(n^2)),隨機化快速排序(很大程度上避免了最壞情況的出現),堆排序(o(nlogn),編程復雜度高),基數排序(理論復雜度o(n),實際要比這個慢。甚至能應付字元串排序,但是編程復雜度高,牽扯到其他數據結構),桶排序(o(n),編程簡單,效率高,但是應付的數據范圍不能太大,受到內存大小的限制)。

平時比較常用的就是快速排序,程序簡單,效率也可以接受。

這是我了解的一些東西,希望對你有幫助。

⑽ 尋求c語言5種以上的簡單的排序方法

//直接插入排序
voidStaInsertSort(inta[],intn)
{
inti,j,tmp;

for(i=1;i<n;++i)
{
tmp=a[i];
j=i-1;
while(j>=0&&tmp<a[j])
{
a[j+1]=a[j];
--j;
}
a[j+1]=tmp;
}
}

/*折半排序*/
voidMidSort(inta[],intn)
{
inti,j;
intlow,high,mid;
inttmp;

for(i=1;i<n;i++)
{
tmp=a[i];
low=0,high=i-1;

while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>tmp)
high=mid-1;
else
low=mid+1;
}

low=high,high=i;
while(high>low+1)
{
a[high]=a[high-1];
--high;
}
a[low+1]=tmp;
}
}

/*冒泡排序*/
voidMaoPaoSort(inta[],intn)
{
inti,j;
inttmp;

for(i=0;i<n-1;++i)
{
for(j=i+1;j<n;++j)
{
if(a[i]>a[j])
{
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
}

/*快速排序*/
voidQuickSort(inta[],intlow,inthigh)
{
inti,j;
inttmp;

if(low<high)
{
i=low,j=high;
tmp=a[low];

while(i<j)
{
while(i<j&&a[j]>=tmp)
--j;
a[i]=a[j];

while(i<j&&a[i]<=tmp)
++i;
a[j]=a[i];
}
a[i]=tmp;
QuickSort(a,low,i-1);
QuickSort(a,i+1,high);
}
}

/*選擇排序*/
voidSelectSort(int*a,intn)
{
inti,j,k;
inttmp;

for(i=0;i<n-1;++i)
{
k=i;
for(j=i+1;j<n;++j)
if(a[k]>a[j])
k=j;
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}

/*堆排序*/
voidSift(inta[],intlow,inthigh)//堆調整函數
{
inti=low,j=2*i+1;
inttmp=a[i];

while(j<=high)
{
if(j<high&&a[j]<a[j+1])
++j;
if(tmp<a[j])
{
a[i]=a[j];
i=j;
j=2*i+1;
}
else
break;
}
a[i]=tmp;
}
voidHeapSort(inta[],intn)//堆排序函數
{
inti;
inttmp;

for(i=n/2-1;i>=0;--i)
Sift(a,i,n-1);

for(i=n-1;i>=1;--i)
{
tmp=a[0];
a[0]=a[i];
a[i]=tmp;
Sift(a,0,i-1);
}
}

熱點內容
緩存視頻合並工具最新版 發布:2025-05-16 09:35:03 瀏覽:193
花雨庭伺服器ip地址和埠 發布:2025-05-16 09:34:58 瀏覽:239
同時修改多台伺服器管理地址工具 發布:2025-05-16 09:20:36 瀏覽:421
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:638
少女前線防檢測腳本 發布:2025-05-16 08:59:07 瀏覽:728
編譯器對系統的依賴 發布:2025-05-16 08:37:29 瀏覽:711
javamap數組 發布:2025-05-16 08:37:28 瀏覽:451
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:125
作為基線存儲 發布:2025-05-16 08:15:22 瀏覽:859