Java 选择排序-我们可以删除算法中的中间变量min吗?
选择排序总是找到最小值并进行交换。但是我可以删除中间变量,只交换I和j吗?原始代码如下:Java 选择排序-我们可以删除算法中的中间变量min吗?,java,sorting,selection,Java,Sorting,Selection,选择排序总是找到最小值并进行交换。但是我可以删除中间变量,只交换I和j吗?原始代码如下: public static void sort(int[] arr){ int n = arr.length; for( int i = 0 ; i < n ; i ++ ){ int minIndex = i; for( int j = i + 1 ; j < n ; j ++ ) if( arr[j] < arr
public static void sort(int[] arr){
int n = arr.length;
for( int i = 0 ; i < n ; i ++ ){
int minIndex = i;
for( int j = i + 1 ; j < n ; j ++ )
if( arr[j] < arr[minIndex] )
minIndex = j;
swap( arr , i , minIndex);
}
}
private static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
公共静态无效排序(int[]arr){
int n=阵列长度;
对于(int i=0;i
我删除了minIndex并在I和j之间进行交换(见下文),它仍然有效。这还是选择排序吗?我们需要另一个变量minIndex有什么好处
public static void sort(int[] arr){
int n = arr.length;
for( int i = 0 ; i < n ; i ++ ){
for( int j = i + 1 ; j < n ; j ++ )
if( arr[j] < arr[i] )
swap( arr , i , j);
}
}
private static void swap(int[] arr, int i, int j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
公共静态无效排序(int[]arr){
int n=阵列长度;
对于(int i=0;i
是的,它是有效的,但您所做的交换比需要的多得多,这可能会降低效率。谢谢。什么因素决定了我们在执行程序时需要一个新的变量?事实上,你不想做比需要更多的交换。因为只使用一个变量在空间上几乎没有成本,并且将有助于避免越来越多的操作。