c語言簡單排序
⑴ 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);
}
}