c語言實現排序的兩種演算法(冒泡,選擇)
阿新 • • 發佈:2019-01-08
寫下來以記錄自己學習過程中遇到的一些問題
1.利用隨機函式產生10個20以內的整數存於陣列中
(1) 按升序輸出排序後的結果(排序可採用冒泡)
(2) 按降序輸出排序後的結果(選擇排序方法)
將問題分塊:
- 10個隨機數的生成
- 氣泡排序
- 選擇排序
(1)對於第一個問題
可以使用stdlib.h 檔案中的rand函式來實現
#include<stdio.h> #include<stdlib> #include<time.h> main() { int a; srand(time(NULL)); a=rand()%10;//輸出10以內的數 a=10+rand()%90;//輸出10-100之間的數 }
(2)氣泡排序演算法
主要是通過相鄰的數的比較,以達到排序的目的,寫成函式形式如下
void bubblesort(int a[10])
{
int i,j,t;//t用於數字的交換
for(i=0;i<10;i++)
{
for(j=0;j<10-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
(3)選擇排序演算法
從前開始向後尋找最小的數與當前的數相交換
void sort(int a[10]) { int i,j,imax,temp; for(i=0;i<9;i++) { imax=i; for(j=i+1;j<10;j++) { if(a[imax]<a[j]) { imax=j;//imax始終是從i開始以後的最大數的下標 } } if(i!=imax)//若最後最大值不是當前i的數則進行換位 { temp=a[i]; a[i]=a[imax]; a[imax]=temp; } } }
最後將其拼接
#include<stdio.h> #include<stdlib.h> #include<time.h> void bubblesort(int a[10]) { int i,j,t;//t用於數字的交換 for(i=0;i<10;i++) { for(j=0;j<10-i;j++) { if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } } void sort(int a[10]) { int i,j,imax,temp; for(i=0;i<9;i++) { imax=i; for(j=i+1;j<10;j++) { if(a[j]>a[imax]) { imax=j; } } if(imax!=i) { temp=a[i]; a[i]=a[imax]; a[imax]=temp; } } } main() { int a[10],i; srand(time(NULL)); for(i=0;i<10;i++) { a[i]=rand()%20; } bubblesort(a); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); printf("降序排列後:\n"); sort(a); for(i=0;i<10;i++) { printf("%d ",a[i]); } } ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20181125103007502.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNzg1MTg2,size_16,color_FFFFFF,t_70)