ورود

View Full Version : سوال: Insertion Sort



arash01
جمعه 12 اسفند 1390, 15:48 عصر
سلام . من این کد رو برای Insertion Sort زدم ولی یه جاییش مشکل داره ... ممنون میشم راهنمایی کنید


package tamrine2;

import java.util.*;
public class Tamrine2 {

static Scanner in=new Scanner(System.in);
public static void main(String[] args) {
int x,j,i;
System.out.printf("Enter n : \n");
int n=in.nextInt();
int[] a= new int[n];
System.out.print("Enter Numbers now : \n");
a[0]=in.nextInt();
for(i=1;i<n;i++)
{
x=in.nextInt();
for( j=0;j<i;j++)
if(x<=a[j])
{
for(int k=i-1;k>j;k--)
{
a[k]=a[k+1];
}
}
a[j]=x;

}
for(i=0;i<n;i++)
System.out.printf("%d ",a[i]);
}
}

در واقع هر عددی رئ که گرفت میاد چک میکنه و بعد از اون جایی که مناسب بود خونه هارو شیفت میده عقب ...

spiderman200700
شنبه 13 اسفند 1390, 11:38 صبح
سلام.
مسئله رو خیلی پیچوندی.

اینم کد این الگوریتم :
public int[] insertionSort(int Numbers[]) {
int i, j, x;
for (i = 0; i < Numbers.length; i++) {
x = Numbers[i];
j = i - 1;
for (; j >= 0 && Numbers[j] > x; j--) {
Numbers[j + 1] = Numbers[j];
}
Numbers[j + 1] = x;
}
return Numbers;
}

arash01
شنبه 13 اسفند 1390, 17:16 عصر
ممنون از راهنماییتون . یه سوال داشتم ... تو خود main میشه متد تعریف کرد یا حتما باید توی یه کلاس جداگانه بنویسیم ؟

spiderman200700
شنبه 13 اسفند 1390, 22:03 عصر
خواهش میکنم.
اگه منظورت از main کلاس اصلی برنامه -یعنی کلاسی که توی اون متد main رو تعریف کردید- هست، بله . چرا نشه. فقط اگه بخوای از متد هایی که توی کلاس اصلی تعریف کردی داخل متد main استفاده کنی، باید به صورت static تعریفشون کنی تا در متد main قابل استفاده باشن. مثل این کد:
public class InsertionSort {

public static void main(String args[]) {
print(insertionSort(new int[]{3, 2, -5, 8, 5, 10, 0, 29, -1}));
}

public static int[] insertionSort(int Numbers[]) {
int i, j, x;
for (i = 0; i < Numbers.length; i++) {
x = Numbers[i];
j = i - 1;
for (; j >= 0 && Numbers[j] > x; j--) {
Numbers[j + 1] = Numbers[j];
}
Numbers[j + 1] = x;
}
return Numbers;
}

public static void print(int Numbers[]) {
for (int Number : Numbers) {
System.out.print(Number + " ");
}
System.out.println();
}
}

همونطور که میدونی ،اگه متد ها رو توی یه کلاس دیگه تعریف کنیم، نیازی نیست که static باشن.

موفق باشی.