前些日子遇到一个算法面试题,需要求出一个数组的所有排列方式,个人所运用到的迭代递归算法与电影的“梦中梦”神似,有感而发。
在每一次做梦之前,先预想好一个状态,在每一个梦做完之后,就需要恢复到我们做这一个梦之前的状态,因为在我们意识中的状态还是最初的状态,就像在递归之前改变数组的排列,递归完毕之后再恢复到这一次递归之前的状态。而我们并不知道我们的梦境处于第几层,于是我们需要一个标识来提供我们现在所处的位置。
//一个泛型数组的空杯交换
public static <T> void temp(T[] arr,int index1,int index2){
T temp;
temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
/**
* 迭代递归
* @param <T> 泛型
* @param arr 泛型数组
* @param flag 标识符,用以标识从第几个元素开始迭代递归,元素从0开始
*/
public static <T> void sortAll(T[] arr,int flag){
if(flag == arr.length){
System.out.println(Arrays.toString(arr));
}else{
for (int i = flag; i < arr.length; i++) {
temp(arr, i, flag);//迭代之前的空杯交换
sortAll(arr, flag+1);//递归,将当前的标记自增
temp(arr, i, flag);//迭代之后恢复原貌
}
}
}
//测试
public static void main(String[] args) {
// Integer[] arr = {1,2,2,3,4};
Object[] arr = {'a','b','c'};
sortAll(arr,0);
}
}
分享到:
相关推荐
PHP实现一维数组的组合算法,欢迎下载和评论。
数组和常用算法
4. 哈希表:虽然不是直接的数组算法,但`Dictionary, TValue>`可以提供基于键值对的高效查找,其内部使用了哈希表。对于查找操作,哈希表通常比数组更快。 5. 动态数组:C#的`List<T>`类提供了动态扩展的数组功能,...
总结来说,从n个数组中取出所有排列组合的Java实现涉及到递归算法、回溯法以及数据结构的操作。理解这些概念并能够熟练运用是成为一名优秀程序员的关键。通过这个例子,我们可以看到如何利用Java的灵活性和表达力来...
《数组与排序算法:从基础到进阶》是一本全面深入探讨数组基础知识和各种排序算法的实用指南。本书旨在为读者提供一个系统化的学习路径,从数组的基本概念开始,逐步深入到复杂的排序算法,帮助读者建立扎实的算法...
使用C语言数组实现BOOTH算法。算法思想来源于计算机组成原理。可以参考 唐朔飞.[计算机组成原理](第2版)
本篇文章将深入探讨如何使用C#来实现字节数组的模式匹配算法。 首先,我们要理解什么是模式匹配。模式匹配是指在一段文本(在本例中是字节数组)中查找一个特定的子序列(模式)。这种子序列可能是另一个字节数组或...
将数组中的数逆序排放
在编程领域,排列组合算法是解决许多问题的关键,特别是在数据处理、数据分析以及各种优化问题中。PHP作为一种流行的服务器端脚本语言,虽然不是为高性能计算而设计,但其丰富的库和简洁的语法使得实现这些算法变得...
因此,利用数组寻址和SCL算法实现多通道模拟量的批量处理成为了一种高效解决方案。本文将详细解析如何通过这种方式优化处理过程。 首先,我们需要创建一个新的数据类型。在西门子TIA博途中,打开PLC的数据类型编辑...
排序数组是指将数组中的元素按特定规则(通常为升序或降序)重新排列的过程。在这个场景中,我们讨论的是如何对整型数组进行排序。 一、冒泡排序 冒泡排序是最简单的排序算法之一。它通过不断交换相邻的不正确顺序...
在本篇【源代码】C++算法中,我们主要探讨的是如何在一维数组中去除重复元素,同时确保算法的时间复杂度为O(n),并且在整个处理过程中不额外开辟新的内存空间。这种问题在实际编程中非常常见,特别是在处理大量数据...
C#的二维数组双线性插值算法。 用于二维数组的双线性插值算法,可分别设置长度和宽度。
在实际编程中,数组排列不仅是理论知识,还需要考虑性能优化,如选择合适的排序算法,考虑内存使用、时间复杂度和空间复杂度。此外,数组还可以与其他数据结构(如链表、队列、栈)结合使用,解决更复杂的编程问题。...
后缀数组是一种在字符串处理中常用的工具,它用于存储一个字符串的所有后缀,并按照特定顺序排列。这个排列顺序可以是字典序或者其他自定义顺序。后缀数组在文本索引、模式匹配、最长公共前后缀查找等众多字符串问题...
后缀数组是由一个文本的所有半无限串(即从文本任意位置开始直至文本结束的所有子串)按照字典顺序排列而成的数组。这种结构能够高效地支持多种复杂的查询操作,比如范围查找、模糊匹配等。 - **应用场景**: - **...
数组的全排列是指将数组中的所有元素按照一定顺序排列的所有可能情况。在这个主题下,我们将深入探讨全排列的算法及其应用。 首先,我们要了解全排列的基本思想。对于一个包含n个不同元素的数组,其全排列数量为n的...
数组则是按照一定顺序排列的集合,易语言中的数组可存储任意类型的数据。因此,字典数组算法模块能够处理复杂的数据集合,并执行如插入、删除、查找等操作。 接下来,我们审视一下该模块中的“字典算法测试”子程序...