首页 > 编程知识 正文

java算法之直接插入排序(java调用排序方法)

时间:2023-12-12 12:54:08 阅读:314773 作者:SLNY

本文目录一览:

关于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" 这个是什么意思?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。