المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : اريييد دالة الترتييب



Akane_Tendo
19-05-2005, 07:17 PM
السلام عليكم

اسمحولي
اخواني

بس اذا ممكن
Sort function
سويتها للترتيب الارقام
لكن كيف اسويها في حالة ترتيب string
يعني الاسماء



public class TestSelectionSort
{
public static void main(String[] args) throws Exception
{
double[] mylist={5.0,4.4,1.9,2.9,3.4,3.5};
System.out.println("my list befor sorting:");
for(int i=0;i<mylist.length;i++)
{
System.out.print("::");
System.out.print(mylist[i]);
}
selectionsort(mylist);
System.out.println(" ");
System.out.println("my list after sorting:");
printlist(mylist);
System.in.read();
}
static void printlist(double[] list)
{
for(int i=0;i<list.length;i++)
System.out.print(list[i]);
System.out.print(" ");
}
static void selectionsort(double[] list)
{
double currentmax;
int currentmaxindex;
for(int i=list.length-1;i>1;i--)
{
currentmax=list[i];
currentmaxindex=i;
for(int j=i-1;j>=0;j--)
{
if(currentmax<list[j])
{
currentmax=list[j];
currentmaxindex=j;
}
}
if(currentmaxindex !=i)
{
list[currentmaxindex]=list[i];
list[i]=currentmax;
}
}
}
}


؟ بليز

ibn_alqalam
19-05-2005, 09:27 PM
من عيوني :-)

حاليا خوارزمك يستخدم عملية المقارنة لترتيب الارقام, اكبر من > , اصغر من < , و يعادل =.

كل تلك العمليات تقارن رقمين وتجيب ب"صح" اذا صحت نتيجة العملية, او ب"خطأ" اذا كانت النتيجة خاطئة. يمكننا ان نستخدم عمليات مقارنة تشابه تلك لنقارن بين نصين. نقول ان نصان متطابقان اذا كانا يحتويان على نفس الحروف وبنفس الترتيب. ونقول ان احدهم اكبر من الاخر اذا كان يسبقه ابجديا حسب ترتيب القاموس, اي ان النص "الاكبر" يحتوي على حروف "اصغر". المقانة القاموسية تقارن نصين ابتداء من اول حرف, لذا النص اكبر من نص اّخر اذا كان يسبقه ابجديا, مثلا:

عبارة "ابجد" اكبر من عبارة "هوز", لان الالف يسبق الهاء ابجديا. وعبارة "شبيك" اكبر من عبارة "شبيك لبيك" مع ان الاولى بالفعل تعتبر جزئية من الثانية, الا ان حسب الترتيب القاموسي, الكلمة الاولى تظهر اولا.

لاستخدام عملية المقارنة الابجدية القاموسية على نصين, استخدم دالة compareTo التي في فئة String, فهي تقارن نصين وتعيد رقما سلبيا, اي اصغر من صفر, اذا كان النص الاول يسبق الاّخر ابجديا. وتعيد رقما ايجابيا, اكثر من صفر, اذا كان الرقم الاول يتلو الثان ابجديا. و تعيد صفر اذا تطابق النصان بالحرف.

اذا تريدين مقارنة نصان لاتينيان وبدون مراعاة للمقام, اي تريدين ان لا تفرقي A من a, فحبنها يمكنك استخدام compareToIgnoreCase, وهذه الدالة ايضا في فئة String.

تعديل بسيط لخوارزمك, غيري كل عملية مقارنة رقمية الى String.compareTo وغيري المتغيرات المحلية في دالة selectionsort من نوع double الى String.

للمزيد من المعلومات:

http://www.infres.enst.fr/docs/jdk1.4.0/api/java/lang/String.html#compareTo(java.lang.String (http://www.infres.enst.fr/docs/jdk1.4.0/api/java/lang/String.html#compareTo%28java.lang.String))

بيبسيه
26-05-2005, 03:05 AM
اذا انتي تستخدمين متغير من نوع string فاستخدامه يكون مثل اللintعادي لانه له overloadللعمليات كلها <و>وغيرها

لكن لو استخدمتي charفلازم تقارنين حرف حرف