السلام عليكم
الإصدار الأول من هذه السلسلة يتكون من أربعة أجزاء:
في المرفقات, الإصدار الأول في ملف PDF.
تحياتي.
السلام عليكم
الإصدار الأول من هذه السلسلة يتكون من أربعة أجزاء:
في المرفقات, الإصدار الأول في ملف PDF.
تحياتي.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
السلام عليكم
وصلني صباح اليوم إيميل من إدارة موقع كتب يُفيد بقبول الكتاب :
خوارزميات البحث و الترتيب - الإصدار الأول
تحياتي.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
جزاك الله خير اتمنى ان يحتوي على الترتيب المتوازي و الديناميكي و ليس فقط الترتيب المتسلسل
بالنسبة للترتيب الفقاعي هناك تحسين آخر يمكنك عمله ؟!!
لنفرض ان المصفوفة ترتبت من اول مره اي في اول pass هل ستكمل حلقة for الاولى حتى النهاية ؟؟
هل يمكنك ان تشرح خوارزمية الترتيب الفقاعي المتوازية ؟!
اقتباسبالنسبة للترتيب الفقاعي هناك تحسين آخر يمكنك عمله ؟!!لنفرض ان المصفوفة ترتبت من اول مره اي في اول pass هل ستكمل حلقة for الاولى حتى النهاية ؟؟
ذكرتُ هذه الإضافة في مقالة الــ Bubble sort, انظر :
اقتباس...لاحظ معي أنه تم ترتيب عناصر الجدول مع أن الحلقة لم تنتهي بعد فما زالت دورتان i=4, i=5.
ما رأيك لو أضفنا شرطا بسيطا يتعلق بالخروج من الدالة إذا وصلت الخوارزمية إلى ترتيب الجدول قبل انتهاء الحلقة ؟
إضافة بسيطة :
الفكرة ببساطة تكمن في استخدام متغير منطقي وتغيير قيمته عندما يتم تبادل محتوى خانتين. عندما نجد أنه لم تتغير قيمة المتغير منطقي في إحدى الدورات فهذا يعني أن خانات الجدول أصحبت مُرتبة بشكل صحيح.
اقتباسهل يمكنك ان تشرح خوارزمية الترتيب الفقاعي المتوازية ؟!
للأسف لا أملك حالياً الوقت الكافي للرد على سؤالك, أرجو المعذرة.
يُمكنني أن أخصص لسؤالك مقالة منفردة لاحقاً نظراً لأهمية الموضوع.
C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around. ― Dennis Ritchie
~OoO~________--------------------------------------------________~OoO~
من مواضيعي :
@ خوارزم: كنت قرأت موضوعك وكتبت برنامج للفرز وأضفت وظيفة عادية للفرز إسمها bsort_sort وأخرى bsort_sort_thread تفرز عن طريق إنشاء عملية موازية وحيدة thread, لافائدة منها وحدها بل سيفيد إذا كنت تفرز أكثر من مصفوفة بحيث كل عملية تتولى مصفوفة أو تقسم المصفوفة على أكثر من عملية. يُمكنك أخذ الأفكار منه.
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <stdio.h>
#define NELEMENTS(x) (sizeof(x) / sizeof(*(x)))
#define SWAP(a, b) \
do {\
a ^= b;\
b ^= a;\
a ^= b;\
} while(0);
typedef struct _SortObject {
int *array;
unsigned int nelements;
} SortObject;
SortObject *bsort_new(int *array, unsigned int nelements);
void bsort_destroy(SortObject *sort);
void bsort_dump(SortObject *sort, char *name);
void bsort_sort(SortObject *sort);
void bsort_sort_thread(SortObject *sort);
DWORD WINAPI bsort_thread_map_sort(void *sort);
int main(int argc, char **argv)
{
int array_one[] = {9, 10, 1, 5, 7, 4, 6, 3, 2, 8};
int array_two[] = {11, 13, 16, 20, 18, 15, 12, 14, 17, 19};
SortObject *obj_one = NULL;
SortObject *obj_two = NULL;
obj_one = bsort_new(&array_one[0], NELEMENTS(array_one));
if( obj_one == NULL ) {
perror("Error");
return -1;
}
obj_two = bsort_new(&array_two[0], NELEMENTS(array_two));
if( obj_two == NULL ) {
perror("Error");
bsort_destroy(obj_one);
return -1;
}
bsort_dump(obj_one, "array_one =");
bsort_sort(obj_one);
bsort_dump(obj_one, "array_one =");
bsort_dump(obj_two, "array_two =");
bsort_sort_thread(obj_two);
bsort_dump(obj_two, "array_two =");
bsort_destroy(obj_one);
bsort_destroy(obj_two);
return 0;
}
SortObject *bsort_new(int *array, unsigned int nelements)
{
SortObject *sort = NULL;
if( (sort = (SortObject*) malloc(sizeof(SortObject))) == NULL )
return NULL;
sort->array = array;
sort->nelements = nelements;
return sort;
}
void bsort_destroy(SortObject *sort)
{
free(sort);
}
void bsort_dump(SortObject *sort, char *name)
{
unsigned int i;
printf("%s -> {", name);
for( i = 0 ; i < sort->nelements - 1; i++ )
printf("%d, ", sort->array);
printf("%d}\n", sort->array);
}
void bsort_sort(SortObject *sort)
{
unsigned int i;
int keep_sorting = 1;
while(keep_sorting) {
keep_sorting = 0;
for( i = 0 ; i < sort->nelements - 1 ; i++ ) {
if( sort->array[i+1] < sort->array) {
SWAP(sort->array[i+1], sort->array);
keep_sorting = 1;
}
}
}
}
DWORD WINAPI bsort_thread_map_sort(void *sort)
{
bsort_sort((SortObject *) sort);
return 0;
}
void bsort_sort_thread(SortObject *sort)
{
DWORD dwThreadId;
HANDLE hThread;
hThread = CreateThread(0, 0, bsort_thread_map_sort, (void *) sort, CREATE_SUSPENDED, &dwThreadId);
if(hThread == NULL) {
printf("Error: bsort_sort_thread\n");
exit(-1);
}
ResumeThread(hThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}مراجع : Win32 Multithreading and Synchronization | Creating Threads
اكرمك الله
سبحانه الله وبحمده سبحانه الله العظيم
if (You Love ArabTeam2000 ) MessageBox.Show("All ArabTeam2000 Love You"); else MessageBox.Show("go to your mama"); السلام عليكم
هذه الداله ترتب خطأ
مطلوب الترتيب حسب الارقم
لكنها با ترتب بالطريقه الصحيحه
ارجو المساعده
int t,h=o no[50];
a=fopen(fopen("c:\\monam.txt","rb");
rewind(a);
if(a==0)
{
printf("error");
getch();
exit(1);
}
fscanf(a,"%d%s%d%d%d",&st.nu,&st.name,&st.arbic,&st.english,&st.c);
while(!feof(a)
{
st.nu==no[h];
h++
fscanf(a,"%d%s%d%d%d",&st.nu,&st.name,&st.arbic,&st.english,&st.c);
}
fclose(a);
for(int i=0;i<h;i++)
for(int j=0;j<h;j++)
if(no[j]>no[j+1])
int temp=no[j];
no[j]=no[j+1];
no[j+1]=temp;
}
for(int r=0;r<h;r++)
{
printf("\n%d",no[r]);
}
printf("\n \t to pack press 0");
scanf("%d",&t);
if(t==0)
getch();
goto w;
}