之前寫算法排序時有些數據總是手工輸入,多少有些不方便,而且在小數據量輸入時還可以接受,但是當數據量上升到K級後就顯得龐雜。而且要保證之前輸入的數據沒有太多重復或者不重復這就更是考驗我們的記憶力拉。所有我寫拉一個產生N個無序整數的程序,此程序可以產生N個數,且在0-N 之間,並且各不相同。
具體代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_NUM 10 //所要產生的數據量
void random_n(int a[],int n); 聲明random_n函數
int main()
{
int a[MAX_NUM],i=0,j=0;
while(j<MAX_NUM)
{
a[j]=-1; //初始化,很重要,之前在初始化上栽了大跟頭
j++;
}
random_n(a,MAX_NUM);
while(i<MAX_NUM)
{
printf("%d\t",a[i]);
i++;
}
printf("\n");
return 0;
}
void random_n(int a[],int n)
{
int temp=0,j=0,count=0,i=0;
srand(time(0));
while(count < n)
{
printf("\nStart!\n");
temp=rand()%n;
printf("\ncount = %d ,temp =%d",count,temp);
for(j=0;j<count;j++)
{
if(a[j]==temp)
{
printf(" Find!\n");
i=1;
break;
}
else
{
i=0; //做標記
}
}
if(j==count && i==0) //比較完畢並且沒有找到相同的
{
printf("\nNOT Find !\n");
a[count]=temp;
count++;
}
}
}
運行結果:
添加這個小函數後,我們在之後的算法數據輸入時可以直接調用這個函數,事先聲明一個含有MAX_NUM 個元素的數組,然後傳參給random_n函數即可。算法的最壞運行情況為O (N^2),最好運行情況為O (N)。
這個算法效率不算高,之後我會給大家介紹一個效率更高的生成無序數的方法
摘自 明月天涯