什么是原地算法In-place Algorithm

时间:2020-01-09 10:35:37  来源:igfitidea点击:

原地算法是一种不使用任何额外空间来转换输入的算法。它使用输入数据所用的相同空间,并在该空间本身中修改数据以产生输出。但是,可以为辅助变量保留少量的额外存储空间。

冒泡排序,选择排序,插入排序等排序算法都是原地排序算法。

合并排序是非原地或者原地排序算法的一个示例。

这是冒泡排序的代码片段,显示了如何使用输入数组本身来产生输出。在比较元素之后在输入数组中使用,如果需要,可以进行交换。它仅使用多余的空间作为temp变量。

int[] arr = {61, 34, 10, 0, 15, 112, 53, 78, 39, 45};
int n = arr.length;
for(int i = 0; i < n; i++){
  for(int j = 0; j < (n - i - 1); j++){
    if(arr[j] > arr[j+1]){
        int temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp; 
    }
  }
}

原地算法的另一个简单示例是反转数组。

int[] arr = {61, 34, 10, 0, 15, 112, 53, 78, 39, 45};
int n = arr.length;
for (int i = 0; i < n / 2; i++) {
    int temp = arr[i];
    arr[i] = arr[n - 1 - i];
    arr[n - 1 - i] = temp;
}