当时是写排序算法,写到shell算法,突然脑袋短路想到了这个思路 然后就试着写了下,
思路大体如下:
一列数列 例如:1,5,2,6,7,4,3
先看第一个数,1 它的前面没有比它大的数,后面没有比它小的数,若以它的位置就是这样
再看第二个数,5 它的前面没有比它大的数,后面有2,4,3三个数比它小,那他的位置是不是
应该向后移动3个单位。就是这样1, , , ,5, ,
以此来看是不是就可以把数字的顺序就记录下来了,然而并不能直接在原来的数列中修改,
因为判断一个数之后需要原有的数列继续确定下一个数,所以说我在这个算法里面又定义了一
个数组,来保存记录下来的已经判断过后的数字顺序,这个算法是半个月之前写的一直没有在看
,因为有人让我分享一些自己看的东西,就想到了这个,整理整理也没考虑时 空复杂度,就这么 写了点东西,我也不知道之前这个算法有没有什么名字,好了不多哔哔代码如下:
public static void sopln(Object obj)
{
System.out.println(obj.toString());
}
public static int[] show()
{
Scanner scan = new Scanner(System.in);
String[] str = scan.next().split(",");
int[] in = new int[str.length];
for(int i = 0; i<str.length; i++)
{
if(str[i] !=null)
{
in[i] = Integer.parseInt(str[i]);
}
else
in[i] = -1;
}
if(scan.nextLine().equals("over"))
scan.close();
return in;
}
public static boolean less(int a ,int b)
{
return a<b;
}
public static void exch(int[] in, int a, int b)
{
if(!((a<0||a>in.length-1)&&(b<0||b>in.length-1)))
{
int temp = in[a];
in[a] = in[b];
in[b] = temp;
}
sopln("交换错误!!");
}
public static boolean isSort(int[] in)
{
for(int i = 0;i<in.length-1;i++)
{
if(less(in[i+1],in[i]))
return false;
}
return true;
}
public static int[] mySortDemo(int[] in)
{
int[] ot = new int[in.length];
for(int x = 0; x <in.length;x++)
{
int min = 0;
int max = 0;
for(int y = 0;y < x; y++)
if(in[x]<in[y])
max++;
for(int y = x+1;y <in.length;y++)
if(in[x]>in[y])
min++;
ot[x-max+min] = in[x];
}
return ot;
}