用C语言如何将一个一维数组中的元素随机排序 如何在C语言中同时得到对同一个数组元素的多个随机排列

\u7528C\u8bed\u8a00\u5982\u4f55\u5c06\u4e00\u4e2a\u4e00\u7ef4\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u968f\u673a\u6392\u5e8f

#include #include #include int main(){int i,j,n,k,t,a[100]; srand((unsigned) time(NULL)); scanf("%d",&n);k=n;//k:\u672a\u5b9a\u987a\u5e8f\u7684\u5143\u7d20\u4e2a\u6570for(i=0;i<n;i++)a[i]=i+1;for(i=0;i<n-1;i++){ j=rand()%k; //\u4ea7\u751f0 ~ k-1\u7684\u968f\u673a\u6570j t=a[j];a[j]=a[k-1];a[k-1]=t;//\u5c06a[j]\u4e0e\u201c\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u201d\u5bf9\u6362 k--;}for(i=0;i<n;i++)printf("%d ",a[i]);printf("\n"); system("pause"); return 0;}

\u968f\u673a\u6570\u6539\u7528\u8fd9\u4e2a\u5427\u3002
srand(rand());//\u8fd9\u6837\u5e94\u8be5\u5c31\u884c\uff0c\u90a3\u4f4d\u5927\u54e5\u5199\u5f97\u5c31\u4e0d\u9519\uff0c\u53ef\u4ee5\u628a\u4ed6\u7684\u968f\u673a\u6570\u6362\u6210\u8fd9\u4e2a\u8bd5\u8bd5\u3002

#include

#include

#include

intmain()

{

inti,j,n,k,t,a[100];

srand((unsigned)time(NULL));

<p

利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。

运行的结果:

#include

#include

intmain()

{

int&nbs

利用rand()函数产生随机数字,rand()%n产生小于n的随机数,然后交换。

扩展资料

C语言排序法

在一层循环找出最小数的下标,该下标用min保存,直到比较完整个数组,即可找到最小的数,然后将该数放入数组的第一位。

这样只能排好一个元素,于是需要再嵌套一层外层循环即可排好所有元素。第二次循环就不用再比较第一个元素了,因为第一个元素已经排好,依次类推,每一次循环就会排好一个,进行n-1次循环即可排好所有元素。



利用rand()函数产生随机数字,rand()%n产生小于n的随机数, 然后交换。

下面是我写的程序和运行的结果:

#include <stdio.h>

#include <stdlib.h>

int main()

{

    int a[1000], n, i, j, p, q, t;

    while(1)

    {

        printf("

请输入一维数组的维数,0结束 n = ");

        scanf("%d", &n);

        if(n==0) break;

        printf("请输入一维数组中的数据:
");

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

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

        j=10;

        while(j--)//随机交换10次

        {

            p=rand()%n;//产生两个随机数

            q=rand()%n;

            t=a[p];//交换

            a[p]=a[q];

            a[q]=t;

        }

        printf("
随机交换后数组的元素为:
");

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

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

    }

}



#include <stdio.h>

#include <stdlib.h>

#include <time.h>

 

int main()

{

int i,j,n,k,t,a[100];

    srand((unsigned) time(NULL)); 

scanf("%d",&n);

k=n; //k:未定顺序的元素个数

for(i=0;i<n;i++)a[i]=i+1;

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

{

        j=rand()%k;  //产生0 ~ k-1的随机数j

        t=a[j];a[j]=a[k-1];a[k-1]=t; //将a[j]与“最后一个元素”对换

        k--;

}

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

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

printf("
");

    system("pause");

    return 0;

}



利用rand()函数产生随机数字,rand()%n产生小于n的随机数, 然后交换。

下面是我写的程序:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[1000], n, i, j, p, q, t;
    while(1)
    {
        printf("

请输入一维数组的维数,0结束 n = ");
        scanf("%d", &n);
        if(n==0) break;
        printf("请输入一维数组中的数据:
");
        for(i=0; i<n; i++)
            scanf("%d", &a[i]);
        j=10;
        while(j--)//随机交换10次
        {
            p=rand()%n;//产生两个随机数
            q=rand()%n;
            t=a[p];//交换
            a[p]=a[q];
            a[q]=t;
        }
        printf("
随机交换后数组的元素为:
");
        for(i=0; i<n; i++)
            printf("%d ", a[i]);
    }
}


你可以用random()函数。首先确定你数组中有n个元素,然后让randdom()函数产生从0到n-1的不同的随机数,然后另外设置一个变量,依次调换数组中的值便可

  • c璇█:缂栫▼瀹炵幇鍦涓缁存暟缁勪腑鏌ユ壘銆佹彃鍏ュ拰鍒犻櫎涓涓鍏冪礌鐨勬搷浣溿
    绛旓細j>i-2;j--) a[j+1]=a[j]; //灏鏁扮粍涓i浣嶇疆鍙婂叾鍚庨潰鐨勬暟锛屼緷娆″悜鍚庣Щ鍔ㄤ竴鏍 a[i-1]=x; //鍦╥浣嶇疆鎻掑叆x n++; } return n; //杩斿洖褰撳墠鏁扮粍澶у皬}int del(int a[],int n,int i){ int j; if(i<1||i>n) printf("鍒犻櫎浣嶇疆闈炴硶\n"); ...
  • 鐢–璇█缂栧啓绋嬪簭,浣垮緱涓缁鏁村瀷鏁扮粍鐨20涓厓绱犱繚瀛樺湪10脳2鐨勪簩缁鏁扮粍涓...
    绛旓細鎴戞槸鍋囧畾20涓厓绱犺兘淇濊瘉 涓鍗婃槸鍋舵暟锛屼竴鍗婃槸濂囨暟 include <stdio.h> int main(){ int a[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};int b[10][2];int i,j,k;j = 0;k = 0;for(i=0; i<20; i++){ if(a[i]%2==0) //濡傛灉鏄伓鏁帮紝瀛樻斁...
  • C璇█涓妸涓涓浜斾綅鏁版斁杩涓缁存暟缁勬庝箞鏀?
    绛旓細瑕灏嗕竴涓浜斾綅鏁版斁鍏涓缁存暟缁勪腑锛屼綘鍙互灏嗚浜斾綅鏁扮殑姣忎竴浣嶆暟瀛楀垎鍒瓨鍌ㄥ湪鏁扮粍鐨勪笉鍚屼綅缃笂銆備互涓嬫槸涓涓ず渚嬩唬鐮侊細include <stdio.h> int main() { int number = 12345;int array[5];// 灏嗕簲浣嶆暟鐨勬瘡涓浣嶆暟瀛楀瓨鍌ㄥ埌鏁扮粍涓 for (int i = 0; i < 5; i++) { array[i] = number % 10...
  • c璇█鎬庝箞鍦涓缁存暟缁勪腑鎻掑叆涓涓鏁?
    绛旓細C璇█閲娌℃湁杩欑鍔ㄦ鏁扮粍锛屼竴鑸涔堝畾涔夋椂瀹氫箟涓涓姣旇緝澶х殑鏁扮粍锛屾瘮濡俛[20]锛屽彧鐢ㄥ叾涓竴閮ㄥ垎锛屾瘮濡傜洰鍓嶆槸鍒癮[5]锛屾彃鍏ヤ竴涓暟瀛楄繘鍘诲氨鏄箣鍚庣殑鏁板瓧鍏ㄩ儴鍚戝悗绉诲姩涓浣嶏紝鐒跺悗鍐嶈祴鍊硷紝瑕佷箞鏂板缓涓涓猘[6]鏁扮粍锛屾妸鍘熸潵鐨勬暟瀛楀鍒惰繘鍘汇
  • C璇█鐢ㄥ啋娉℃硶瀵涓缁存暟缁勪腑10涓暟鎸夐檷搴忚繘琛屾帓鍒
    绛旓細include<stdio.h>int main(){ int n[]={1,2,3,4,5,6,7,8,9,10}; int i,j,num; for(i=0;i<10;i++) { for(j=i+1;j<10;j++) { if(n[i]<n[j]) { num=n[i]; n[i]=n[j]; n[j]=num; } } } printf("1,...
  • 鐢–璇█瀹炵幇涓缁存暟缁勪腑鍒犻櫎绗琋涓厓绱犵殑绋嬪簭鎬庝箞鍐
    绛旓細int delect=0;int i=0,j=0,k=0,t;int n;//n涓鏁扮粍闀垮害 n=sizeof(arr)/sizeof(int);//printf("%d\n",n);//娴嬭瘯n printf("鍒犻櫎鍓嶆暟缁勪负锛");for(k=0;k<=n-1;k++){ printf("%4d",arr[k]);} printf("\n");printf("璇疯緭鍏ヨ鍒犻櫎绗嚑涓暟锛 \n");scanf("%d",&t);...
  • c璇█涓,鐢ㄤ竴缁存暟缁鎺掑簭鍗佷釜鏁存暟,鎬庝箞鍋
    绛旓細min=i;//鎶婃瘡娆″惊鐜殑绗涓涓鏁颁綔涓烘渶灏忓 for(j=i+1;j<10;j++){ if(a[min]>a[j])min=j;//浜ゆ崲 } if(min!=i)//璇存槑绗竴涓暟涓嶆槸鏈灏忔暟锛屾墍浠ュ皢a[i+1]~a[10]涓渶灏忓间笌a瀵规崲 { t=a[min];a[min]=a;a=t;} } printf("鎺掑簭鍚庣殑搴忓垪涓猴細\n");for(i=0;i<10;i+...
  • C璇█涓缁存暟缁璧嬪兼柟娉
    绛旓細姣斿涓嬮潰鐨勪唬鐮侊紝閫氳繃memcpy鍑芥暟鏉ュ疄鐜版暟鎹殑澶嶅埗锛屼互瀹炵幇鏁扮粍璧嬪肩殑鍔熻兘銆俰nclude <stdio.h>#include <stdlib.h>#include <string.h>int main(){int inx;int a[10] = {1,2,3,4,5,6,7,8,9,10};int b[5];//澶嶅埗4涓厓绱狅紝b[4]灏嗘槸闅忔満鍊糾emcpy(b, a, 4 * sizeof(int));for (...
  • C璇█濡備綍瀹炵幇涓涓竴缁存暟缁勭殑杈撳叆杈撳嚭?
    绛旓細C璇█绋嬪簭濡備笅锛歩nclude <stdio.h> void fun(int a[],int n,int *k){ int i,maxxr,j;maxxr=a[0];for(i=0;i<n;i++){ if(maxxr<a[i]){ maxxr=a[i];} } for(i=0;i<n;i++){ if(maxxr==a[i]){ j=i;break;} } k=j;} int main(void){ int a[10]={ 876,...
  • C璇█涓庝箞鎶婁竴缁存暟缁璧嬬粰鍙﹀涓涓竴缁存暟缁
    绛旓細鍙互閲囩敤涓ょ鏂瑰紡锛1銆佹寜鍏冪礌璧嬪硷細閬嶅巻涓缁存暟缁勶紝骞跺皢姣忎釜鍏冪礌璧嬪煎埌浜岀淮鏁扮粍鐨勫搴斿厓绱犱笂銆傛垨鑰呴亶鍘嗕簩缁存暟缁勶紝灏嗘瘡涓厓绱犺祴鍊间负涓缁存暟缁勫搴斿间笂銆備紭鐐逛负鎿嶄綔鐏垫椿锛屽彲浠ユ寜鐓ч渶瑕佷换鎰忚祴鍊笺2銆佸綋涓缁存暟缁勫拰浜岀淮鏁扮粍绫诲瀷鐩稿悓锛岃屼笖璧嬪奸『搴忎笌涓缁存暟缁勪腑鐨瀛樺偍椤哄簭瀹屽叏鐩稿悓鏃讹紝鍙互鐢╩emcpy鐨勬柟寮忥紝鐩存帴涓娆℃ц祴鍊...
  • 扩展阅读:c#面试题 ... 一维数组排序从小到大 ... c语言一维数组循环 ... 如何定义一个一维数组 ... 一维数组格式 ... c#二维数组初始化 ... 定义一个整形一维数组 ... java定义一个一维数组 ... c语言宏定义一个一维数组 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网