PDA

View Full Version : عدد یک میلیون و دو میلیون در int



5hahab
یک شنبه 02 خرداد 1395, 14:28 عصر
عدد یه میلیون و دو میلیون توی int جا نمیشن از چه نوعی باید معرفی کنم?

سوال: برنامه اي يک آرايه دو ميليوني را گرفته سپس با استفاده از دو نخ يکي از نخ ها از صفر تا يک ميليون و ديگري از يک ميليون تا دو ميليون را مرتب کند سپس دو آرايه مرتب را باهم ادغام کند


#include <stdio.h>
#include <windows.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
DWORD Sort[2]={0,0};
int prm [2][1]={{0,1000000},{1000001,2000000}};
DWORD WINAPI summation (LPvoid param);
{int TId=*(int) param;
for ( DWORD i=prm [TId][0]; i<=prm[TId][1]; i++ )
{
//sort
int Sort( int A[], int p, int q)
{
int temp;
int x = A[p];
int i = p;
for (int j = p+1; j <= q; j++)
{
if (A[j] <= x)
{
i++;
temp = A[j];
A[j] = A[i];
A[i] = temp;
}
}
temp = A[i];
A[i] = A[p];
A[p] = temp;
return i;
}
}
}
int main(int argc, char** argv) {
DWORD ThreadID [2];
HANDLE ThreadHandle [2];
int p[2]={0,1};
for (int i=0; i<2; i++)
ThreadHandle[i] = CreateThread (NULL,0,summation,&p[i],0,&ThreadID[i]);
for (int i=0; i<2; i++)
WaitForSingleObject(ThreadHandle[i],INFINITE);
//merge
void merge( int arr[ ], int low, int mid, int high )
{
int i, j, k, t;
j = low;
for( i = mid + 1 ; i <= high ; i++ )
{
while( arr[ j ] <= arr[ i ] && j < i )
{
j++;
}
if( j == i )
{
break;
}
t = arr[ i ];
for( k = i ; k > j ; k -- )
{
arr[ k ] = arr[ k - 1 ];
}
arr[ j ] = t;
}
}
printf(s);
return 0;
}

ASM6502
یک شنبه 02 خرداد 1395, 18:13 عصر
اگه از اعداد منفی استفاده نمیکنی از این استفاده بکن :

unsigned long int
0 to 4,294,967,295

rahnema1
دوشنبه 03 خرداد 1395, 23:36 عصر
سلام
int در بیشتر سیستم ها ۳۲ بیتی هست و می تونه 2 میلیون را در خودش نگه داره
ضمن اینکه به جای استفاده از thread مربوط به API ویندوز خود زبان ++C هم thread داره که به صورت زیر می توانید استفاده کنید

#include <vector>
#include <thread>
#include <algorithm>
template <typename VectorType>
void sort_merge(VectorType& input)
{
std::thread t1(std::sort<typename VectorType::iterator>, input.begin(), input.begin() + 1000000);
std::thread t2(std::sort<typename VectorType::iterator>, input.begin() + 1000000, input.end());
t1.join();
t2.join();
}
int main()
{
std::vector<int> arr(2000000);
iota(arr.begin(), arr.end(), 0);
std::shuffle(arr.begin(), arr.end(), std::mt19937(std::random_device()()));
sort_merge(arr);
}