2013-09-24 2 views
0

Это код, который у меня есть для моей программы сортировки, я хочу знать, есть ли способ улучшить код без использования дополнительных методов или классов.Выбор Сортировка в Java, способы я могу улучшить код?

public class Selection_Sort { 


public static void main(String[] args) { 
int arr[]={234,151,123,4,5342,76,48}; 
int min=0; int temp; 
for(int i=0;i<=arr.length-1;i++){ 
    min=i; 
    for (int k=i+1;k<arr.length;k++){ 
     if(arr[k]<arr[i]){ 
      temp=arr[i]; 
      arr[i]=arr[k]; 
      arr[k]=temp; 
     } 
    } 
} 
for (int j=0;j<=arr.length-1;j++) 
    System.out.println(arr[j]+" "); 

} 

} 

ответ

0

Похоже, что вы используете алгоритм bubblesort, который очень медленный. Если вы хотите улучшить свой код, я бы рекомендовал использовать такой алгоритм, как ripplesort или quicksort.

0

Незначительное улучшение должно быть так:

int arrayLength = arr.length; 
// Then use it in conditional statement of for loop. 

Так что это не будет вызывать свойство длины Array каждый раз в цикле. Для небольшого числа циклов это не сильно влияет, но это поможет сократить время, когда петли больше или число итераций цикла больше.

+0

arr.length вызов имеет O (1) сложность в Java, поэтому извлекая длину массива в переменной, а затем использовать его в условном операторе не выглядит как улучшение – shakhawat

0
  1. Значение локальной переменной мин не используется
  2. < к = arr.length-1

->

k < arr.length 
2
public static void main(String[] args) { 
    int arr[]={234,151,123,4,5342,76,48}; 
    int arrLength = arr.length; 
    for(int i=0;i<arrLength-1;i++){ 
     int min=i; 
     for (int k=i+1;k<arrLength;k++){ 
      if(arr[k]<arr[min]){ 
       min = k; 
      } 
     } 
     if (i != min) { 
      int temp=arr[i]; 
      arr[i]=arr[min]; 
      arr[min]=temp; 
     } 
    } 
    for (int j=0;j<arrLength;j++) { 
     System.out.println(arr[j]+" "); 
    } 
} 
0

Используйте этот

class Selection { 
    public static void main(String[] args) { 
     int arr[]={234,151,123,4,5342,76,48}; /* arr[0] to arr[n-1] is the array to sort */ 
     int lowest, i, j; 
     for(i = 0 ; i < arr.length-1; i++) { /* advance the position through the entire array */ 
      lowest = i;      /* assume the min is the first element */ 
      for(j = i+1 ; j < arr.length; j++) { /* if this element is less, then it is the new minimum */ 
       if(arr[j] < arr[lowest]) { 
        lowest = j;     /* found new minimum; remember its index */ 
       } 
      } 
      if(lowest != i) {     /* lowest is the index of the minimum element. Swap it with the current position */ 
       int temp = arr[i]; 
       arr[i] = arr[lowest]; 
       arr[lowest] = temp; 
      } 
     } 
     for (int k = 0; k <= arr.length-1 ; k++) { 
     System.out.println(arr[k] + " "); 
     } 
    } 
} 

Это выбранный вами алгоритм сортировки.

0

Оригинальный вариант сортировки. Реализация, о которой идет речь, не использует min для выполнения операции свопинга.

public static void sort(int[] arr) { 
     int min=-1; 

     for (int i = 0; i < arr.length; i++) { 
      min = i; 
      for (int j = i + 1; j < arr.length; j++) { 
       if (arr[min] > arr[j]) { 
        min = j; 
       } 
      } 
      if (min != i) { 
       int temp = arr[min]; 
       arr[min] = arr[i]; 
       arr[i] = temp; 
      } 
     } 
} 
-1
public class JavaApplication55 { 

    public static void main(String[] args) { 

     int[] array ={234,435,567,768,123,456,789,789,5670,6789}; 
    for(int j =0;j< array.length;j++){ 
     for(int i =j+1;i < array.length;i++){ 
     int temp; 

      if(array[j]>array[i]){ 

      temp =array[j]; 
      array[j] =array[i]; 

      array[i] =temp; 

      } 

      else{} 


     }} 





     for(int k =0;k< array.length;k++){ 

      System.out.println(array[k]); 

     } 

    } 
enter code here 

} 
+0

Пожалуйста, объясните, почему ваш код полезен. – ElectronicGeek

+0

hi, whts bad in it, если у вас есть какое-либо решение, вставьте его здесь – user3580320

+0

Это не обязательно плохо, но если вы добавите какое-то объяснение, тогда люди будут с большей вероятностью принимать его, потому что тогда есть что-то, что можно было бы поддержать. См. Здесь: http://stackoverflow.com/questions/how-to-answer – ElectronicGeek