1. 程式人生 > >c語言實現排序的兩種演算法(冒泡,選擇)

c語言實現排序的兩種演算法(冒泡,選擇)

寫下來以記錄自己學習過程中遇到的一些問題

1.利用隨機函式產生10個20以內的整數存於陣列中
(1) 按升序輸出排序後的結果(排序可採用冒泡)
(2) 按降序輸出排序後的結果(選擇排序方法)

將問題分塊:

  1. 10個隨機數的生成
  2. 氣泡排序
  3. 選擇排序

(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)