关于Java插入排序和二分法的排序问题.不能使用Break

pliuyu 2008-04-20 10:22:03
我想用插入排序法
public static int[] insertionSort(int[] a) {
int n = a.length;
for (int i = 1; i < n; i++) {
int temp = a[i];
int j;
for (j = i - 1; j >= 0 && temp < a[j]; j--) {
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
return a;
}
}
来排序
int nombres[] = new int [10];
for ( int i=0; i<nombres.length ; i ++) {
nombres[1] = nombres.length-i ;
}
谁能写一个完整的程序?

第二个 是用另一种方法来排序 好像叫2分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序"

第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方
...全文
316 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dan1980 2008-04-21
  • 打赏
  • 举报
回复
插入排序有那么复杂吗?

public static void insertionSort(int[] arr) {
for (int i = 1, j, temp; i < arr.length; i++) {
if (arr[i-1] > arr[i]) {
temp = arr[i];
for (j = i; j > 0 && arr[j-1] > temp; j--)
arr[j] = arr[j-1];
arr[j] = temp;
}
}
}


外层循环要执行n-1次, 里层循环每次依次执行1, 2, ..., n-1次, 所以最坏情况下的比较次数为∑1,(n-1)次.

你说的所谓"二分法", 排序算法里没有这种算法, 你可能指的是速序排序或者是归并排序. 这二者都是以分治法为指导思想的, 理解起来稍难. 如果你不了解算法思想, 单给你一个程序你也看不懂的. 最好是找本算法方面的书来看看.
aipb2008 2008-04-21
  • 打赏
  • 举报
回复
谁能写一个完整的程序?
2楼写那样

第二个 是用另一种方法来排序 好像叫2分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序"
2分法排序没听说过,2分是用于对已排序的序列做查找的,看你描述应该是叫做:归并排序

第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方
最大比较次数是n*(n-1)/2,发生在所有元素逆序时。
循环次数跟比较次数是一致的,这个算法的事件复杂度是O(n^2)
pliuyu 2008-04-21
  • 打赏
  • 举报
回复
必须得用这个{
int nombres[] = new int[10];
for(int i=0;i<nombres.length;i++)
{nombres[i]=nombres.length-i;
}来写,我写了一个,不知道哪出错了,谁给指导一下?
import java.util.*;
public class text
{
public static void main(String[] args)
{
int nombres[] = new int[10];
for(int i=0;i<nombres.length;i++)
{nombres[i]=nombres.length-i;
}

int n = nombres.length;
for (int i = 1; i < n; i++) {
int temp = nombres[i];
int j;
for (j = i - 1; j >= 0 && temp < nombres[j]; j--) {
nombres[j + 1] = nombres[j];
}
nombres[j + 1] = temp;

System.out.println(nombres[i]);
}
}
}
goodmrning 2008-04-20
  • 打赏
  • 举报
回复
class Test
{
public static int[] insertionSort(int[] a)
{
int n = a.length;
for (int i = 1; i < n; i++)
{
int temp = a[i];
int j;
for (j = i - 1; j >= 0 && temp < a[j]; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
return a;
}

public static void main(String []args)
{
int[]myarr={10,9,8,7,6,5,4,3,2,1};

int []a=insertionSort(myarr);
for(int j=0;j<a.length;j++)
{
System.out.println(a[j]);

}

}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧