本文目录一览:
关于java直接插入算法的问题
/**这是一个利用直接插入排序法写的一个小程序;
直接插入排序是一个将待排序列中的元素p[i]与一个有序序列中的元素q[j--]比较(从后向前),当p[i] = q[j] (递增排序)或 p[i] = q[j] (递减排序)时,q[j+1] = p[i];反之就将q[j]移位到q[j+1]为p[i]的插入预留空间且如果j==0则q[j] = p[i].
*/
public class SISort
{
public static int[] sortAscending(int []with){ //整数递增排序
int length = with.length; //获取待排数组的元素个数;
int []temp = new int[length];
temp[0] = with[0]; //定义一个只有一个元素的有序数组
for(int i=1; ilength; i++){
for(int j=i-1; j=0;j--){
if(with[i] = temp[j]){ //如果待排序列中的元素大于等于有有序序列中的元素,则插入
temp[j+1] = with[i];
break;
}
else {
temp[j+1] = temp[j]; //给待插入元素预留空间
if(j == 0)
temp[j] = with[i]; //with[[i]是有序序列中最小的,因此排在开头
}
}
}
return temp;
}
public static double[] sortAscending(double []with){ //带小数的递增排序
int length = with.length; //获取待排数组的元素个数;
double []temp = new double[length];
temp[0] = with[0]; //定义一个只有一个元素的有序数组
for(int i=1; ilength; i++){
for(int j=i-1; j=0;j--){
if(with[i] = temp[j]){ //如果待排序列中的元素大于等于有有序序列中的元素,则插入
temp[j+1] = with[i];
break;
}
else {
temp[j+1] = temp[j]; //给待插入元素预留空间
if(j == 0)
temp[j] = with[i]; //with[[i]是有序序列中最小的,因此排在开头
}
}
}
return temp;
}
public static double[] sortDescending(double []with){ //递减排序
int length = with.length; //获取待排数组的元素个数;
double []temp = new double[length];
temp[0] = with[0]; //定义一个只有一个元素的有序数组
for(int i=1; ilength; i++){
for(int j=i-1; j=0;j--){
if(with[i] = temp[j]){ //如果待排序列中的元素小于等于有有序序列中的元素,则插入
temp[j+1] = with[i];
break;
}
else {
temp[j+1] = temp[j]; //给待插入元素预留空间
if(j == 0)
temp[j] = with[i]; //with[[i]是有序序列中最大的,因此排在开头
}
}
}
return temp;
}
public static int[] sortDescending(int []with){ //递减排序
int length = with.length; //获取待排数组的元素个数;
int []temp = new int[length];
temp[0] = with[0]; //定义一个只有一个元素的有序数组
for(int i=1; ilength; i++){
for(int j=i-1; j=0;j--){
if(with[i] = temp[j]){ //如果待排序列中的元素小于等于有有序序列中的元素,则插入
temp[j+1] = with[i];
break;
}
else {
temp[j+1] = temp[j]; //给待插入元素预留空间
if(j == 0)
temp[j] = with[i]; //with[[i]是有序序列中最大的,因此排在开头
}
}
}
return temp;
}
/* public static void main(String[] args)
{
int []test1 = {2,6,5,8,7,9,10,256,248,14}; //测试数组
double []test2 = {1.1,2.0,3,5,6,8.9,99,5};
int []temp1; //中间变量
double []temp2;
temp1 = sortDescending(test1); //测试整数递减排序
System.out.println("get a Decreasing sequence ");
for(int i=0; itemp1.length; i++){
System.out.println(temp1[i]);
}
temp1 = sortAscending(test1); //测试整数递增排序
System.out.println("get a Increasing sequence");
for(int i=0; itemp1.length; i++){
System.out.println(temp1[i]);
}
temp2 = sortDescending(test2); //测试带小数递减排序
System.out.println("get a Decreasing sequence ");
for(int i=0; itemp2.length; i++){
System.out.println(temp2[i]);
}
temp2 = sortAscending(test2); //测试带小数递增排序
System.out.println("get a Increasing sequence");
for(int i=0; itemp2.length; i++){
System.out.println(temp2[i]);
java中排序方法有哪些
1、直接插入排序:最基本的插入排序,将第i个插入到前i-1个中的适当位置。
2、折半插入排序:因为是已经确定了前部分是有序序列,所以在查找插入位置的时候可以用折半查找的方法进行查找,提高效率。
3、 希尔排序: 又称缩小增量排序法。把待排序序列分成若干较小的子序列,然后逐个使用直接插入排序法排序,最后再对一个较为有序的序列进行一次排序,主要是为了减少移动的次数,提高效率。原理应该就是从无序到渐渐有序,要比直接从无序到有序移动的次数会少一些。
4、 冒泡排序:反复扫描待排序序列,在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。第一趟,从第一个数据开始,比较相邻的两个数据,(以升序为例)如果大就交换,得到一个最大数据在末尾;然后进行第二趟,只扫描前n-1个元素,得到次大的放在倒数第二位。以此类推,最后得到升序序列。如果在扫描过程中,发现没有交换,说明已经排好序列,直接终止扫描。所以最多进行n-1趟扫描。
5、快速排序: 思想:冒泡排序一次只能消除一个逆序,为了能一次消除多个逆序,采用快速排序。以一个关键字为轴,从左从右依次与其进行对比,然后交换,第一趟结束后,可以把序列分为两个子序列,然后再分段进行快速排序,达到高效。
此外还有选择、归并、分配排序等等及它们的子类排序
Java 直接插入排序法
比如数组[3,2,1,5]
这段处理就返回[1,2,3,5]
它的处理是从第二位开始依次跟前边的比,比前边的小就往前移动。
也就是[3,2,1,5]
[2,3,1,5]
[1,2,3,5]
(int j = i - 1; j = 0 temp array[j]; j--)
i是这次处理的下标,第一次是1,第二次是2,第三次是3,对应上边原数组里的2,1,5
处理开始时把下标i对应的值存在temp里,j表示的是i前边的下标,temp array[j]的时候说明i下标的值比前边的小,所以把小的值拿到前边去。
这么看是很抽象的,自己在本上写的数组,画一下处理过程会更有助于你理解。
java插入排序算法
import java.util.Arrays;
public class Insert {
public static void main(String[] args) {
int[] ary={8,3,7,1,9,4};
selectionSort(ary);
System.out.println(Arrays.toString(ary));
}
public static void selectionSort(int[] ary) {
int i,j,t;
for(i=1;iary.length;i++){
t=ary[i];
for(j=i-1;j=0tary[j];j--){
ary[j+1]=ary[j];
}ary[j+1]=t;
}
}
}
插入算法的原理是当要被插入的数比数组中元素小就放在他的前面,加了一个中间变量t,把数组元素先放那存着。如果成功插入就把插入数据放到对应的数组位置。然后下一个继续先放在t里面存着。直到最后一个数
基础的~java直接插入排序 求大虾指点~~~= =
说几个我认为错误的地方吧:
1、你不是double数组吗? 怎么用 int 来取值呢? " int m=n[i];//代码1"
2、代码3,4怎么都是给n[j] 赋值呢? 赋值两次?
3、"n[j]=n[0];//代码4" 这个是什么意思?