當前位置:首頁 » 編程語言 » c語言值亂序在哪裡排
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言值亂序在哪裡排

發布時間: 2022-06-07 01:19:26

❶ 如何用c語言排序

試想一下,如果讓你自己設計qsort函數,需要些什麼東西,首地址要有吧,總共有幾個元素要有吧,每個元素佔多大的內存要有吧(想想就知道函數內部要根據內存塊的大小交換數據實現排序),最後一個規則總要有吧,qsort的靈活性在於規則是活的不是死的,其實大多數語言的排序都是類似的機制啦。。。看下qsort的原型
void
qsort(void
*base,int
nelem,int
width,int
(*fcmp)(const
void
*,const
void
*));
base就是所謂的首地址,nelem就是元素個數,width,就是每個元素的大小,fcmp是一個函數指針,這里函數的定義要類似於int
cmp(const
void*a,const
void*b),其實很多人不知道怎麼使用qsort主要是在於對這個函數不懂得如何寫,其實想想就知道函數把每個元素的地址扔給比較函數,根據比較函數的返回值來決定到底是a在前面還是b在前面,所以在函數裡面要先取出值,所以一般的寫法就是
int
cmp(const
void*a,const
void*b)
{
return
*(t*)a-*(t*)b;
}
先強制轉換成t類型再用取值符號*取出指,函數之所以用空指針是因為空指針可以指向任何類型,對於基本類型,只要將t修改為基本類型就行了,對於結構體之類的的指針,則return
((t*)a)->x-((t*)b)->x;其中t就是結構體的名稱,x就是你要比較的欄位,當然如果你要降序的話就將ab顛倒就行了,說了這么多,寫一個例子,比如要對下面的數組排序
int
a[5]={2,10,5,4,0};
qsort(a,5,sizeof(int),cmp);
比較函數
int
cmp(const
void*a,const
void*b)
{
return
*(int*)a-*(int*)b;
}
。。呵呵,啰嗦了點。希望對你有幫助

❷ C語言有什麼辦法把一定范圍里的數子打亂順序

洗牌的話自然先要從洗牌的本來面目考慮啊x_x

不過樓上的太寫實了...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
int a[52];

srand(time(0));

a[0] = 0;

for (int i = 1; i < 52; i++)
{
int p = rand() % i;
int t = a[p];

a[p] = i;
a[i] = t;
}
}

❸ c語言如何隨機打亂數組

int a[] = {3,5,7,1,4};
// 本程序考慮時間復雜度最小情況的亂序演算法,O(t)=len-1
// 演算法模仿彩票搖號,從全集中先取一個為第一位,再在剩餘集合中取出一個為第2位,...
// 直至最後一個,只是考慮空間利用,已排序集合利用全集的空間。
int len=sizeof(a); // 全集元素數量
srand(unsigned(time(NULL))); // 搖號機准備
for(int i=len;i>1;i--) // 從全集開始搖號,直至只剩一個,已排在最後
{
int cur=len-i+(rand()%i); // 在剩餘集合中搖號
int tmp=a[len-i]; // 當前序號位置挪空
a[len-i]=a[cur]; // 搖出的綵球放入當前序號
a[lcur]=tmp; // 放好剩餘的綵球
}

❹ 怎樣用C語言打亂一個已排序的數組

如果要求不是很嚴格的話,感覺可以隨機交換N次,每次交換,隨機生成兩個交換的元素的下標。

如果要求嚴格隨機的話,感覺可以依次從數組里無放回的取數,並按照取數的先後順序放入一個新的數組,然後新的數組就是打亂順序之後的數組了。

❺ 用C語言對數組內元素亂序排列並輸出

方法1:比較笨的辦法是先排好。再在裡面找。看是原來的第幾個。 (代碼我就不寫了。)
方法2:有一個很快的方法,就是用快速排序排,
如果你深入的了解了快排,那麼這個就很簡單了。而且效率很高。
我給你寫代碼。

❻ C語言 把亂序12345按順序排列

意思寫清楚一些

❼ C語言中如何將數組亂序

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
int main()
{
int a[] = {3,5,7,1,4};
int n=5;
int i,j,T=1000,tmp;
srand(unsigned(time(NULL)));
while(T--)
{
i=rand()%n;
j=rand()%n;
tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
for(i=0;i<n;i++)printf("%d ",a[i]);
puts("");
return 0;
}

❽ c語言 輸出結果 成了亂序

很正常啊 你什麼編譯器?

❾ 關於c語言排序問題

#include
<stdio.h>
#include
<stdlib.h>
main()
{

int
a,b,c,t;

scanf("%d%d%d",&a,&b,&c);

if(a>b)

{t=a;a=b;b=t;}

if(a>c)

{t=a;a=c;c=t;}

if(b>c)

{t=b;b=c;c=t;}

printf("%d%d%d",a,b,c);

system("pause");

}