我的偉大航路(10)

2021-10-02 11:23:25 字數 3225 閱讀 5302

今天學習比較少

今天的內容有

1、兩個排序方法

(關於排序方法,我覺得對於理解演算法比較重要故學之)

(1)、氣泡排序

(2)、快速排序

2、乙個演算法題(今天不是只做了乙個題,是因為別的題是入門的那種,非常簡單,沒有講頭)

1、氣泡排序

氣泡排序,即兩兩對比,前者大的與後者互換

兩層迴圈

一層為假設最壞的情況下的迴圈次數(假設有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的最短路徑,他們之和相加若仍然大於等於之前擴充套件的最優路程,那麼就不用繼續擴充...