我想用插入排序法
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分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序" 第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方

解决方案 »

  1.   

    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]);

    } }
    }
      

  2.   

    插入排序有那么复杂吗? 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)次.你说的所谓"二分法", 排序算法里没有这种算法, 你可能指的是速序排序或者是归并排序. 这二者都是以分治法为指导思想的, 理解起来稍难. 如果你不了解算法思想, 单给你一个程序你也看不懂的. 最好是找本算法方面的书来看看.
      

  3.   

    必须得用这个{
    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]);
    }
    }
    }
      

  4.   

    谁能写一个完整的程序? 
    2楼写那样第二个 是用另一种方法来排序 好像叫2分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序" 
    2分法排序没听说过,2分是用于对已排序的序列做查找的,看你描述应该是叫做:归并排序第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方
    最大比较次数是n*(n-1)/2,发生在所有元素逆序时。
    循环次数跟比较次数是一致的,这个算法的事件复杂度是O(n^2)