واضح آرشیو وب فارسی:سایت ریسک: مرتب سازی انتخابی و ادغام p_z 16 خرداد 1386, 10:18کسی می تونه کمککم کنه ؟ من یه برنامه می خوام که یک لیست از نامها داریم مرتب سازی به دو روش marge & selection و تعداد عملیات پایه ای اون رو با هم مقایسه کنه emad_67 16 خرداد 1386, 17:10برای مرتب کردن نان ها میتونی از دستور strcmp برای مقایسه دو رشته استفاده کنی و بهد یکی از این دو الگوریتمی که گفتی رو پیاده کنی parvin_nik11 16 خرداد 1386, 22:29khob dastoraye strcmp chi hast ? to c++ ham hast ? emad_67 17 خرداد 1386, 07:04تو c++ هم هست این تابع به این صورت نوشته میشه strcmp(s1,s2) که s1 و s2 یک رشته هستند تابع strcmp رشته اولش یعنی s1 را با s2 مقایسه می کند مثلا فرض کن رشته اول ما "abc" است و رشته دو "abe" تابع strcmp کاراکتر به کاراکتر رشته اول رو با رشته دوم مقایسه میکند و در صورت یکی بودن کاراکترها دو کاراکتربعدی را مقایسه میکند در اینجا ابتدا دو کاراکتر اول یعنی a ها با هم مقایسه شده و چون برابرن سپس b ها با هم مقایسه میشوند و به همین ترتیب تا آخر ادامه پیدا میکند در صورتی که کل رشته اوا با دوم برابر بود مقدار 0 بر میگردد و لی در صورتی که این تابع به اولین کاراکتری که که نابرابر باشند برسد در صورت بزگتربودن کاراکتر رشته اول مقدار 1 و در صورت کوچکتربودن -1 بر میگرده منظور از بزگتر یا کوچکتر بودن اینه که کد اسکی آنها از هم بزرگتریا کوچکتر باشند در نسخه های turbo و borland مفدار برگشتی این تابع اختلاف کد ا*** هاست ولی در visual فقط 0 یا 1 یا -1 بر کیگرده parvin_nik11 17 خرداد 1386, 20:21من برنامه شو می خوام نه توضیحش :(( یعنی برنامه ی مرتب سازی واسه عدد و دارم اما نمی تونم به اسم تغییرش بدم فقط می تونه عدد یا فقط 1 کاراکتر و مرتب سازی کنه arash_j13 18 خرداد 1386, 06:49خب فقط کافی اسم ها رو از نوع string تعریف کنید اون موقع همون برنامه ای که برای اعداد کار می کرده برای این هم کار می کنه parvin_nik11 18 خرداد 1386, 15:34اخه با string اررور میده میشه بگید کجاهای این برنامه رو باید عوض کرد تا درست شه ؟ #include < iostream.h > #include < conio.h > #include < stdio.h > void print(int * a) { for (int i = 0; i < 10; i++) { cout << a[i] << "-"; } cout << endl; } void mergeConquer(int * a, int left, int mid, int right) { int lno = mid - left + 1; int rno = right - mid; int * L = new int[lno]; int * R = new int[rno]; for (int y = 0; y < lno; y++) { L[y] = a[left + y]; cout << L[y] << "l"; } cout << endl; for (int z = 0; z < rno; z++) { R[z] = a[mid + z + 1]; cout << R[z] << " r "; ; } cout << endl; y = 0; z = 0; for (int i = left; i <= right; i++) { if ( (y < lno) && (z < rno)) { if (L[y] <= R[z]) { a[i] = L[y]; y++; } else { a[i] = R[z]; z++; } } else if ( (y < lno) && (z >= rno)) { a[i] = L[y]; y++; } else if ( (y >= lno) && (z < rno)) { a[i] = R[z]; z++; } } } void mergeDivide(int * a, int left, int right) { int mid = (left + right) / 2; if (left < right) { cout << "============"; mergeDivide(a, left, mid); mergeDivide(a, mid + 1, right); mergeConquer(a, left, mid, right); } } void main() { clrscr(); int a[] = { 5, 24, 6, 48, 9, 40, 42, 3, 1, 7}; mergeDivide(a, 0, 9); print(a); } emad_67 18 خرداد 1386, 20:38خوب این برنامه ای که شما نوشتی برای اعداده و اگه بخواین با رشته کار کنید باید تغییراتی کلی رو تو برنامه بدین منظورم syntax هستش parvin_nik11 19 خرداد 1386, 09:54خوب این و که میدونم مشکل تو همین تغییراتشه emad_67 19 خرداد 1386, 20:36شما با اشاره گر ها و رشته ها آشنایی دارید؟ من یه نمونه برنامه اینجا گذاشتم براتون ولی الگوریتمش bubble sort هست که میتونید تغییرش بدید parvin_nik11 19 خرداد 1386, 22:04ممنوننننننننننننننن خیلی خیلی لطف کردید . یعنی فقط به جای bubble sort کد merge sort , selection sort رو بزارم دیگه ؟ emad_67 20 خرداد 1386, 09:02ممنوننننننننننننننن خیلی خیلی لطف کردید . یعنی فقط به جای bubble sort کد merge sort , selection sort رو بزارم دیگه ؟ اره اگه اون bubble sort رو فهمیده باشی میتونی با الگوریتم هایی هم که خودت می خوای بنویسی
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 673]