今天學習比較少
今天的內容有1、氣泡排序1、兩個排序方法
(關於排序方法,我覺得對於理解演算法比較重要故學之)
(1)、氣泡排序
(2)、快速排序
2、乙個演算法題(今天不是只做了乙個題,是因為別的題是入門的那種,非常簡單,沒有講頭)
氣泡排序,即兩兩對比,前者大的與後者互換兩層迴圈
一層為假設最壞的情況下的迴圈次數(假設有5個數字,每個數字都需要互換,除了第乙個自己本身以外,所以這層迴圈的上限是5-1)
另一層為最壞情況下還剩下多少互換的迴圈次數(假設5個數字,第乙個數字還可能互換5-1次,最後乙個數字還可能互換0次,所以這層迴圈的上限是5-1-x)(x是最外層迴圈當下的迴圈數)
簡單來說就是外層迴圈是選擇第幾個數字去比較**比較簡單,所以直接上完整的內層迴圈是這個數字需要去比較的其他數字
public
static
void
bubblesort
(int
arr)}}
}
結果
這是原始陣列資料[3,
7,2,
9,4,
1,0,
5,8]
這是氣泡排序後的陣列資料[0,
1,2,
3,4,
5,7,
8,9]
2、快速排序
快速排序是先找出乙個標準數字(一般取陣列的第乙個數字)乙個範圍(左標和右標)**如下根據這個標準數字,
在所有的數字中把所有大於標準數的放在右邊,所有小於標準數的放在左邊,
左與右標一開始分別在所有數字的最左邊與最右邊,
當發生數字變換的時候,
如果變換的數字是大於標準數的,則右標減一,
如果變換的數字是小於標準數的,則左標加一,
當左標與右標相等的時候,則該標準數完成了它的使命,開始進行下乙個遞迴
在方法中的下乙個遞迴有兩個
乙個是在標準數左邊的(即小於標準數的一半)引數為起始下標(為當前方法的起始座標)與左標
另乙個是在標準數右邊的(即大於標準數的一半)引數為左標+1與終止下標(為當前方法的終止下標)
public
static
void
quicksort
(int
arr,
int start,
int end)
// 使用右邊的數字替換左邊的數
arr[left]
= arr[right]
;// 如果左邊的數字比標準數小
while
(left < right && arr[left]
<= stard)
//將左邊的數字替換掉右邊的數字
arr[right]
= arr[left];}
//這時左與右標相等,都指向中間,將他賦值標準數
arr[left]
= stard;
// 處理所有的小的數字
quicksort
(arr, start, left)
;// 處理所有的大的數
quicksort
(arr, left +
1, end);}
}
結果
原始資料[3,
4,6,
7,2,
7,2,
8,0]
排序資料[0,
2,2,
3,4,
6,7,
7,8]
快速排序之所以叫做快速排序,原因是它適應於較多的資料,它的時間複雜度是o(nlogn),這種函式的特點是剛開始增長較快,資料量越大,消耗的時間越趨於乙個常量3、演算法題
題目如下
問題描述很遺憾我糾結了一上午,也沒憋出來,這是網上的做法利用字母可以組成一些美麗的圖形,下面給出了乙個例子:
abcdefg
babcdef
cbabcde
dcbabcd
edcbabc
這是乙個5行7列的圖形,請找出這個圖形的規律,並輸出乙個n行m列的圖形。
輸入格式
輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。
輸出格式
輸出n行,每個m個字元,為你的圖形。
樣例輸入
5 7樣例輸出
abcdefg
babcdef
cbabcde
dcbabcd
edcbabc
是找規律的方法,
當行與列標相同的時候,全為a
當行大於列標的時候,字母為列標減一的ascii碼加一
當行小於列標的時候,字母為行標減一的ascii碼加一
**如下
public
static
void
main
(string[
] args)
else
if(j > i)
else
if(j < i)
system.out.
print((
char
) a[i]
[j]);}
system.out.
println()
;}}
這裡用數字表示字母,可以非常方便的以for迴圈來達到目的(65是a)
結果
8
9abcdefghi
babcdefgh
cbabcdefg
dcbabcdef
edcbabcde
fedcbabcd
gfedcbabc
hgfedcbab
明天需要跟上高數的學習了,雖然考研定的目標不是很高,但也不能鬆懈
今天你最後遇見的那個人有在微笑嗎?——幸運星
海賊王之偉大航路
題目鏈結 思路 基本狀壓dp 看題目知道此題求的是最短哈密頓路徑,也就是一條從1到n的經過所有點的最短路徑。我們可以使用狀態壓縮,使用乙個二進位制數state代表一種狀態,state代表經過的所有點的集合。例如state 1,代表只經過1號點。state 3 二進位制為0011 代表經過1號點和2號...
海賊王之偉大航路
路飛他們偉大航路行程的起點是羅格鎮,終點是拉夫德魯 那裡藏匿著 唯一的大秘寶 one piece 而航程中間,則是各式各樣的島嶼。因為偉大航路上的氣候十分異常,所以來往任意兩個島嶼之間的時間差別很大,從a島到b島可能需要1天,而從b島到a島則可能需要1年。當然,任意兩個島之間的航行時間雖然差別很大,...
百練 4124 海賊王的偉大航路
這裡所需要的剪枝一共有三種 1.若走到現在的路程已經大於等於之前擴充套件的最優路程,則剪枝 2.設乙個估計函式,這個估計函式是現在已經還沒有走的點,若有c1,c2.cn,則取終點為c1的最短路徑,到c2的最短路徑.到cn的最短路徑,他們之和相加若仍然大於等於之前擴充套件的最優路程,那麼就不用繼續擴充...