PDA

View Full Version : مشکل با مرتب سازی حبابی در C++



snbb000
چهارشنبه 05 تیر 1392, 11:14 صبح
سلام
دوستان مشکل این کد من چیه ؟

#include <iostream>
#include <string>
using namespace std;

void sort(string [],int);
main()
{


string stName[5];
for(int i=0;i<5;i++)
{
cout<<"Enter Name "<<i+1<<" : ";
cin>>stName[i];

}


sort(stName,5);
cin.ignore();
cin.get();


}

void sort(string stName[],int count)
{
string saveStName;
for(int i=count ; i >= 0 ; i--)
{
for(int j=0; j<i ; j++)
{
if(stName[j][0] > stName[j+1][0])
{
saveStName = stName[j+1];

stName[j+1] = stName[j];

stName[j] = saveStName;


}


}

}

for(int k=0;k<count;k++)
{
cout<<stName[k];
}

}

snbb000
چهارشنبه 05 تیر 1392, 11:26 صبح
مشکلو فهمیدم مشکل این بود که توی for(int i=count ; i >= 0 ; i--) باید مقدار i رو count-1 میزاشتم
میشه یکی توضیح بده وقتی i همون count باشه چرا برنامه اجرا نمیشه ؟ و چه مشکلی پیش میاد ؟
ممنون

anonymous$
چهارشنبه 05 تیر 1392, 21:22 عصر
تو جستجو ترتیبی همیشه تعداد مقایسه اعداد درون آرایه یکی کمتر از تعداد خود اعداده,فرض کن تو آرایه 5 تا عدد داری خب پس اولین مقایسه بین مقدار عناصر یک و دو هست بعد بین دو و سه وبعد بین سه و چهار و بعد چهار و پنج پس تعداد مقایسه میشه چهار,خب حالا شما میبایست تو برنامه حلقه خارجی رو طوری تعریف کنی که یک بار کمتر از تعداد اعداد درون آرایه تکرار بشه ولی شما با توجه به اینکه 5 عدد دارین گفتین : for(int i=count ; i >= 0 ; i--)
این یعنی اینکه حلقه خارجی(تعداد مقایسه)6 بار باشه در صورتی که بایستی 4 بار تکرار بشه,;کلا هر طور که عشقته میتونی حلقه خارجی رو مقدار دهی کنی ولی حتما باید یه بار کمتر از اعداد باشه,در ضمن تو دستور if اگه قسمت ستون([0]) رو هم ننویسی طوری نیست