黑马程序员技术交流社区
标题: 如何让排序更优 [打印本页]
作者: 杜鹏云 时间: 2012-8-7 16:13
标题: 如何让排序更优
用quickSort 已经可以成功按照歌曲时间排序,请问如果遇到了时间相同的歌曲如何按照歌曲名排列呢?(如果歌曲名称还相同的话就按照演唱者排列)
这是算法部分的代码:
public static int partition(Song array[], int left, int right)
{
int i = left, j = right;
Song tmp;
int pivot = array[(left + right) / 2].time;
while (i <= j) {
while (array.time < pivot)
i++;
while (array[j].time > pivot)
j--;
if (i <= j) {
tmp = array;
array = array[j];
array[j] = tmp;
i++;
j--;
}
};
return i;
}
public static void quickSort(Song array[], int left, int right) {
int index = partition(array, left, right);
if (left < index - 1)
quickSort(array, left, index - 1);
if (index < right)
quickSort(array, index, right);
} 望高手提供一个能够保证运算速度的方法!感激不尽!
作者: 罗磊 时间: 2012-8-7 16:23
不太明白哥们的意思 不过你可以试试java提供的 Arrays.sort(arr);
作者: 余明辉 时间: 2012-8-7 16:54
目测你那个Song要实现comparable接口,晚点试试
作者: 尤洋 时间: 2012-8-7 17:00
你的问题问的太笼统了,而且代码中没有一个字的注释,实在让人很为难啊。
给你说下思路吧。
按你描述的意思,这个程序,必须要有3个单独封装的方法 1.按时间排序 2.按歌曲名排序 3按歌手排序
想要达到你要的效果只需要一个多重判断就可以,
int 按时间排序()
{
if(时间相同)
{
if (歌曲名不同)
调用按歌曲名排序的方法;
else
调用按歌手排序的方法;
}
按时间排序;
}
作者: 黑马-张化 时间: 2012-8-7 17:04
如果 要运行速度快、、我建议你 用快速排序 、嘎嘎 一下就是几十个Y- public class QuickSort {
- /**主方法*/
- public static void main(String[] args) {
- //声明数组
- int[] nums = {27, 8, 57, 9, 23, 41, 65, 19, 0, 1, 2, 4, 5};
- //应用快速排序方法
- quickSort(nums, 0, nums.length-1);
- //显示排序后的数组
- for(int i = 0; i < nums.length; ++i) {
- System.out.print(nums[i] + ",");
- }
- System.out.println("");
- }
- /**快速排序方法*/
- public static void quickSort(int[] a, int lo0, int hi0) {
- int lo = lo0;
- int hi = hi0;
- if (lo >= hi)
- return;
- //确定指针方向的逻辑变量
- boolean transfer=true;
- while (lo != hi) {
- if (a[lo] > a[hi]) {
- //交换数字
- int temp = a[lo];
- a[lo] = a[hi];
- a[hi] = temp;
- //决定下标移动,还是上标移动
- transfer = (transfer == true) ? false : true;
- }
- //将指针向前或者向后移动
- if(transfer)
- hi--;
- else
- lo++;
- //显示每一次指针移动的数组数字的变化
- /*for(int i = 0; i < a.length; ++i) {
- System.out.print(a[i] + ",");
- }
- System.out.print(" (lo,hi) = " + "(" + lo + "," + hi + ")");
- System.out.println("");*/
- }
- //将数组分开两半,确定每个数字的正确位置
- lo--;
- hi++;
- quickSort(a, lo0, lo);
- quickSort(a, hi, hi0);
- }
- }
复制代码
作者: 杜鹏云 时间: 2012-8-7 17:13
尤洋 发表于 2012-8-7 17:00 ![](static/image/common/back.gif)
你的问题问的太笼统了,而且代码中没有一个字的注释,实在让人很为难啊。
给你说下思路吧。
按你描述的意思 ...
多重的判断是否降低了程序执行的效率
作者: 尤洋 时间: 2012-8-7 17:57
对于正常人而言不会降低效率;
因为正常人听的歌曲绝大部分都不一样,要听同一首歌曲也会选择 循环播放,所以判断其实只进行了一次就结束了。
只有少部分歌曲会进行到多重判断
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |