პრობლემა:
კონსოლიდან შეგყვავს n და შემდეგ n ცალი მთელი რიცხვი, დაალაგეთ რიცხვები
ზრდადობით და დაბეჭდეთ.
ჩვენი ამოცანა შეგვიძლია სამ ნაწილად დავყოთ
- წავიკითხოთ n ცალი მთელი რიცხვი და შევინახოთ თითოეული ArrayList-ში
- შევქმნათ ფუნქცია რომელიც მიიღებს Int-ების ArrayList-ს და უკან დაგვიბრუნებს დალაგებულ მიმდევრობას
- დავბეჭდოთ ჩვენი ფუნქციის მიერ დაბრუნებული მიმდევრობა.
- წავიკითხოთ n კონსოლიდან, ამისთვის გამოვიყენოთ მეთოდი
readInt();, ამის შემდეგ კიforციკლის გამოყენებით წავიკითხოთ n ცალი რიცხვი, თითოეული კი შევინახოთInteger-ების ArrayList-ში, შესაბამისად მივიღებთ კოდს
int n = readInt("N: ");
ArrayList<Integer> array = new ArrayList<Integer>();
for(int i = 0; i < n; i++) {
int newNum = readInt("Enter Num: ");
array.add(newNum);
} - სორტირების ფუნქციის შესაქმნელად დაგვჭირდება რაიმე ალგორითმი, ასეთი კი უამრავია, ამ შემთხვევაში გამოვიყენოთ
selectionSort, რადგან დასაიმპლემენტირებლადაც და გასააზრებლადაც ძალიან მარტივია. ალგორითმი შემდეგნაირია, წარმოვიდგინოთ რომ ჩვენი რიცხვები გაყოფილია ორ ნაწილად (დალაგებულ და დაულაგებელ), ყოველ ჯერზე კი დაულაგებელ ელემენტებს შორის ვიპოვოთ მინიმალური და გადავიტანოთ დალაგებულში.
- ბოლოს კი უნდა დავბეჭდოთ ჩვენი რიცცხვები, ამისთვისაც შეგვიძლია ცალკე ფუნქცია შევქმნათ, რომელიც მიიღებს ArrayList-ს და for ციკლის გამოყენებით თითოეულ წევრს დაბეჭდავს შესაბამისად მივიღებთ კოდს
private void printArray(ArrayList<Integer> array) {
for(int i = 0; i < array.size(); i++) {
println(i + " --- " + array.get(i));
}
}რა თქმა უნდა selectionSort-ის ნაცვლად შეგვეძლო სხვა უფრო სწრაფი ალგორითმიც გამოგვეყენებინა, მაგალითად mergeSort, რომელიც შემდეგნაირია:
- გავყოთ n ელემენტიანი მიმდევრობა ორ n / 2 ელემენტის შემცველ ქვემიმდევრობად
- მიღებული ქვემიმდევრობები კვლავ გავყოთ ორ ტოლ ნაწილად და ასე გავაგრძელოთ მანამ სანამ ყველა ქვემიმდევრობაში ერთი ლემენტი არ დაგვრჩება
- მიღებული ქვემიმდევრობები გავაერთიანოთ წყვილ-წყვილად ისე, რომ თითოეული გაერთიანებული ქვემიმდევრობა დალაგებული იყოს.

