+ 1
Guys Another problem :)
I don't think that there is any problem in logic i have checked it and dried run it couple of times. still not getting the desired output. Can anyone find the problem? Attempt is here đ https://code.sololearn.com/cDkQ2px2oNVx/?ref=app output will be //output = 1,1,2,2,3,3,5,8
5 Answers
+ 5
if(arr[i]!=arr[arr[i]-1]) what are you trying by this statement?
When i = 0,
arr[ 0 ] != arr[ arr[0] - 1 ]
2 != arr[1] => 2 != 3
when you try to swap, 2 by 3 :
int temp=arr[i]; // 2
arr[i]=arr[arr[i]-1]; 2 replaced by arr[ 2-1] = 3
But next arr[ 0 ] is 3 so arr[ 3-1] = 1 is replaced by 2 by
arr[arr[i]-1]=temp;
So array is 3,3,2,8,2,3,5,1
You are changing entire array..
By this you need 2 temp variables..
But why are you comparing arr[ I] != arr[ arr[ I ] -1 ] to swap?
What is your expected output?
And you may have infinite loop once id condition is true....
+ 2
Your sorting algorithm seems incorrect.
either you can use builtin Arrays.sort() or learn again : https://www.geeksforgeeks.org/sorting-algorithms/
import java.util.Arrays;
public class Program
{
public static void print(int arr[]){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
if(i<arr.length-1) System.out.print(",");
}
}
public static void main(String[] args) {
int arr[]={2,3,1,8,2,3,5,1};
Arrays.sort(arr);
//output = 1,1,2,2,3,3,5,8
print(arr);
}
}
+ 2
Sry it still don't work.
You are modying arr[i] by
arr[i]=tempy;
So next one arr[ arr[i] ] will point to some other new location, not the previous one before change in
arr[arr[i]-1]=tempy;
and
tempy = temp will not affect arr elements at any location.
edit:
can you explain about your logic?
+ 1
i don't want to use other approach i know other many approaches but this is "swap sort" approach which i am learning. we don't need to use extra space and can complete operation with O(1).
+ 1
I made extra temp variable to store //arr[arr[i]-1]