-
双层for循环排序,如何优化0
public class Category { private Integer cid; //分类ID private String cname; //分类名称 private List<Product> pList; //分类中的产品集合 } public class Product { private Integer pid; //ID private String pname; //产品名称 private Double price; //价格 private Date createTime; //录入时间 } public class Client { private static final String[] category_sort_name = {"数码", "服装", "美食", "医药"}; /** * 判断字符串obj是否在数组array中存在 */ private static boolean exists(String[] array, String obj) { for(String arr : array) { if(arr.equals(obj)) { return true; } } return false; } /** * 排序要求: * 1:先取出 List<Category> 中的Category.cname 在category_sort_name里面的分类 * 2:Category的cname排序要求和category_sort_name里面的顺序一样 * 取出Category里面的List<Product>要求根据产品的price asc, createTime desc排序 * 3:取出所有剩余Category.cname不在category_sort_name里面的分类, * List<Product>要求根据createTime desc排序 */ public static List<Product> sort(List<Category> clist) { List<Product> result = new ArrayList<>(); ProductSort sort1 = new ProductSort(1); ProductSort sort2 = new ProductSort(2); /** * 先排序指定的分类 */ for(String cname : category_sort_name) { for(Category category : clist) { if(category.getCname().equals(cname)) { Collections.sort(category.getpList(), sort1); result.addAll(category.getpList()); } } } //这里有双层的for循环,请问,如何优化 /** * 排序剩余的分类 */ List<Product> tempList = new ArrayList<>(); for(Category category : clist) { if(!exists(category_sort_name,category.getCname())) { tempList.addAll(category.getpList()); } } Collections.sort(tempList, sort2); result.addAll(tempList); return result; } } class ProductSort implements Comparator<Product>{ /** * 1 : 根据产品的price asc, createTime desc排序 * 2 : 根据产品的createTime desc排序 */ private int type = 1; public ProductSort(int type) { this.type = type; } public int compare(Product o1, Product o2) { int result = 0; if(type == 1) { if(o1.getPrice().compareTo(o2.getPrice()) != 0) { result = o1.getPrice().compareTo(o2.getPrice()); } else { result = o1.getCreateTime().compareTo(o2.getCreateTime()); } } else { result = o1.getCreateTime().compareTo(o2.getCreateTime()); } return result; } }
求思路,谢谢2014年8月07日 09:59
目前还没有答案
相关推荐
C++循环冒泡法优化 在看到for循环冒泡排序(c++) 后 再次优化了一下,它的程序不能运行,我运行优化的成功了,对初学者理解有很大帮助(还有注释)
- 使用双层循环结构,外层控制比较的轮次,内层负责比较和交换操作。 **2.3 代码分析** 对于C语言版本的冒泡排序,代码如下: ```c for(h=n-1; h>0; h=k) { /* 循环到没有比较范围 */ for(j=0, k=0; j; j++) { /...
插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,...在C语言中,插入排序的实现可以通过双层循环结构来完成,通过比较和移动元素实现数组的排序。
在双层for循环结构中执行了冒泡排序的逻辑,其中外层循环变量j从0开始,直到9(因为最后一个元素不需要再次比较),内层循环变量i从0开始,直到9-j(每次外层循环结束后,最大的元素会被放置在正确的位置,所以每次...
- 使用双层循环,从二维数组的每一个元素出发,将元素逐个添加到一维数组中。 - 示例代码片段: ```c int b[6]; // 定义一维数组 int k = 0; // 初始化计数器 for (int i = 0; i ; i++) { for (int j = 0; j ...
在Java中,冒泡排序可以使用for循环实现。你可以创建一个名为`bubbleSort`的方法,接收一个整数数组作为参数,然后在方法内部实现冒泡排序的逻辑。记得在实际编写代码时,考虑到边界条件和优化措施,以提高代码的...
这种双层循环结构使得冒泡排序的时间复杂度为O(n^2),其中n是数组的长度。虽然冒泡排序效率较低,但对于小规模数据或部分有序的数据,它仍然具有一定的实用价值。 此外,冒泡排序还有优化的版本,例如“早停”策略...
Java实现选择排序时,通常使用一个for循环外加一个while或if循环,时间复杂度同样为O(n^2)。 3. 插入排序(Insertion Sort) 插入排序将未排序的元素逐个插入到已排序的部分,保持有序状态。Java实现插入排序可以...
接下来是冒泡排序的核心部分,通过双层循环实现。外层循环`For i = 1 To n - 1`控制了排序的轮数,因为每一轮都会把当前未排序部分的最大元素放到正确的位置。内层循环`For j = n To i + 1 Step -1`则负责在当前未...
排序的核心在于双层循环。外层循环`i`控制整个排序过程的轮次,内层循环`j`负责在每一轮中进行相邻元素的比较和必要时的交换。由于每完成一轮,最大的元素都会被放置在正确的位置上,因此内层循环的范围可以逐渐...
由于采用了双层循环来进行两两元素之间的比较,当数据量较大时,效率会降低。 ### 总结 本文介绍了如何在C语言中实现一个特定的排序筛选功能,包括文件读写、自定义排序算法以及数组的基本操作等关键知识点。通过...
这个双层`for`循环实现了对数组的冒泡排序,每一轮循环都将当前未排序部分的最大元素“冒泡”到正确的位置。 总之,通过这次实验,学生不仅掌握了C语言中的基本循环结构,还学会了如何利用这些结构实现不同的算法,...
描述中提到了“常用算法”,这可能是指通过多重循环实现的一些常见编程算法,例如遍历、查找、排序等。在实际编程中,熟练掌握多重循环可以帮助我们更有效地编写代码来解决复杂问题。 4.7.5部分详细介绍了VB中的...
代码中,同样记录了排序开始时间,通过双层循环找到当前未排序部分的最小值,并将其放置在正确的位置上,直至整个数组排序完成。最后,输出排序所需时间。 ### 插入排序 插入排序的基本思想是:通过构建有序序列,...
2. **双层循环**: - **外层循环**:控制排序的趟数,每一次循环都会把当前未排序部分的最大值移动到最后。 - **内层循环**:进行相邻元素的比较和交换。 3. **交换条件**:当发现前一个元素大于后一个元素时,就...
在Java语言中,冒泡排序的实现是通过双层循环来完成的。外层循环控制排序的总轮数,而内层循环则负责每一轮中相邻元素的比较和交换。下面详细介绍冒泡排序算法的写法和要点。 1. 主要思想:冒泡排序的基本思想是...
知识点:数组的声明和初始化、冒泡排序法、for循环语句的使用。 5. 数组的使用:在第五个例子中,我们可以看到使用了数组来存储十个数字,并将其逆序输出。这是一个基本的数组应用。 知识点:数组的声明和初始化、...
通过双层FOR循环分别遍历原矩阵的行和列,然后交换元素的位置。 7. **十进制转二进制** 提供了一个将用户输入的十进制整数转换为二进制的程序。使用DO WHILE循环,不断对十进制数进行除2取余操作,直到商为0,然后...