自己無聊腦袋短路想了一個排序算法。。
當時是寫排序算法,寫到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;
}
本文出自 “13205514” 博客,謝絕轉載!
自己無聊腦袋短路想了一個排序算法。。