我想用插入排序法
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分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序" 第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方
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分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序" 第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方
{
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]);
} }
}
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)次.你说的所谓"二分法", 排序算法里没有这种算法, 你可能指的是速序排序或者是归并排序. 这二者都是以分治法为指导思想的, 理解起来稍难. 如果你不了解算法思想, 单给你一个程序你也看不懂的. 最好是找本算法方面的书来看看.
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]);
}
}
}
2楼写那样第二个 是用另一种方法来排序 好像叫2分法 "我们可以改进上面的排序法,用表格中间的元素把表格分成前后两部分并对它们进行排序. 然后我们可以把新的元素放到已排序好的元素的后面或前面 这样可以减少一半的元素移动次数 以这种方式修改第一题里的程序"
2分法排序没听说过,2分是用于对已排序的序列做查找的,看你描述应该是叫做:归并排序第三个 插入法里 进行的比较次数最大会是多少 ? 然后写一下这种排序法的循环次数上有什么特别的地方
最大比较次数是n*(n-1)/2,发生在所有元素逆序时。
循环次数跟比较次数是一致的,这个算法的事件复杂度是O(n^2)