مرتب سازی انتخابی و ادغام

p_z

New Member
کسی می تونه کمککم کنه ؟ من یه برنامه می خوام که یک لیست از نامها داریم مرتب سازی به دو روش marge & selection و تعداد عملیات پایه ای اون رو با هم مقایسه کنه
 

emad_67

Member
برای مرتب کردن نان ها میتونی از دستور strcmp برای مقایسه دو رشته استفاده کنی و بهد یکی از این دو الگوریتمی که گفتی رو پیاده کنی
 

emad_67

Member
تو 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

New Member
من برنامه شو می خوام نه توضیحش :((
یعنی برنامه ی مرتب سازی واسه عدد و دارم اما نمی تونم به اسم تغییرش بدم فقط می تونه عدد یا فقط 1 کاراکتر و مرتب سازی کنه
 

arash_j13

Member
خب فقط کافی اسم ها رو از نوع string تعریف کنید اون موقع همون برنامه ای که برای اعداد کار می کرده برای این هم کار می کنه
 

parvin_nik11

New Member
اخه با string اررور میده
میشه بگید کجاهای این برنامه رو باید عوض کرد تا درست شه
؟

#include < iostream.h >
#include < conio.h >
#include < stdio.h >

void print(int * a) {
for (int i = 0; i < 10; i++) {
cout << a << "-";
}
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 = L[y];
y++;
}
else {
a = R[z];
z++;
}
}
else if ( (y < lno) && (z >= rno)) {
a = L[y];
y++;
}
else if ( (y >= lno) && (z < rno)) {
a = 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

Member
خوب این برنامه ای که شما نوشتی برای اعداده و اگه بخواین با رشته کار کنید باید تغییراتی کلی رو تو برنامه بدین منظورم syntax هستش
 
آخرین ویرایش:

parvin_nik11

New Member
ممنوننننننننننننننن خیلی خیلی لطف کردید .
یعنی فقط به جای bubble sort کد merge sort , selection sort رو بزارم دیگه ؟
 

emad_67

Member
ممنوننننننننننننننن خیلی خیلی لطف کردید .
یعنی فقط به جای bubble sort کد merge sort , selection sort رو بزارم دیگه ؟
اره اگه اون bubble sort رو فهمیده باشی میتونی با الگوریتم هایی هم که خودت می خوای بنویسی
 

جدیدترین ارسال ها

بالا