關於演算法筆記(1)中氣泡排序的bug
問題的發現
近一段正在配置openGL的環境,想使用VScode作為開發環境。剛剛配置好了VScode的C++環境,使用的編譯器是Clang++,測試使用的程式碼是之前的寫的BubbleSort.cpp。很奇怪,輸出的結果只有一位數字2,在之前都是可以跑通的。問題的解決路徑很有意思,所以想記錄下來。
問題的解決的正確路徑
debug發現len的值在迴圈中一直沒有變,直到所有迴圈跑完從函式返回時變成了1。將迴圈的len變成固定數值12,輸出結果中沒有1,多了個12。判斷是len的數值和陣列中的1交換了。發現是第二層迴圈的判斷條件i>=0; 寫錯了,應該去掉等號。
真正的解決路徑
遇到之後懵了,以為是自己環境配錯了,叫了宿舍的大神幫我看看。大神用g++輸出了彙編程式碼,大致擼了一遍感覺沒有錯,但是發現len的儲存和陣列的儲存在棧中時緊挨著的。然後我就把陣列中最小的數變成了2,發現輸出了兩個數,應該是len的值被函式中的陣列操作給改寫了。然改成固定輸出12,發現少了最小的數,多了12,然後輸出ary[-1]
相關推薦
關於演算法筆記(1)中氣泡排序的bug
問題的發現 近一段正在配置openGL的環境,想使用VScode作為開發環境。剛剛配置好了VScode的C++環境,使用的編譯器是Clang++,測試使用的程式碼是之前的寫的BubbleSort.cpp。很奇怪,輸出的結果只有一位數字2,在之前都是可以跑通的。問
排序演算法(1):氣泡排序和插入排序
1.1 氣泡排序 氣泡排序需要多次遍歷列表。它比較相鄰的項並交換那些無序的項。每次遍歷列表將下一個最大的值放在其正確的位置。實質上,每個項“冒泡”到它所屬的位置。 用python寫交換操作時,與大多數程式語言略有不同(需要臨時儲存位置),python可以執行
平日小演算法筆記 (1) 字首和求遞增三元組
2018.4.3 遇到一個很有意思的題目 題目:遞增三元組 給定三個整數陣列 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 請你統計有多少個三元組(i, j, k) 滿足: 1. 1 &l
KCF跟蹤演算法學習筆記(1)
KCF跟蹤是相關濾波跟蹤器最具有代表性的,但是作為一個從來沒接觸過跟蹤演算法,線代苦手來說,看懂KCF中的原理簡直是難上加難,網上所有的相關文件要說也夠多了,可惜水平太差,看完以後只想問兩個問題,這是什麼?這又是什麼?再難啃的骨頭也是要啃的,所以決定把目前還一知半解的學習內容
演算法(二):氣泡排序
氣泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。 它重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作是重複的進行直到沒有有再需要交換,也就是說該數列已經排序完成。 這個演算法的名字由來是因為越大的元素會
圖解演算法學習筆記(四):快速排序
本章內容:學習分而治之,快速排序 1) 示例1: 假設你是農場主,有一小塊土地,你要將這塊地均勻分成方塊,且分出的方塊儘可能大。如何分? 你要將這塊地均勻分成方塊,且分出的方塊要儘可能大。顯然,下面的分法不符合要求。 此時,你應該使用D&C策略(div
Java常用的八種排序演算法與程式碼實現(一):氣泡排序法、插入排序法、選擇排序法
這三種排序演算法適合小規模資料排序 --- 共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法) 不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 --- 穩定排序演算法:可以保持數值相等的兩個物件,在排序之
演算法研究(1)python實現經典排序演算法並可視化分析複雜度
排序演算法在演算法界是一個怎麼樣的存在?就好像在學術界中數學的地位,說直接用好像用不上,可是不會做起事情來總會捉襟見肘,左支右絀。找工作的時候,有的面試官甚至會讓我們手寫排序演算法。既然排序演算法如此重要,就讓我們一起去夯實基礎,切切實實得掌握它吧。 前言
TensorFlow筆記(1)——TensorFlow中的相關基本概念
前言 Tensorflow 是一個程式設計系統,使用圖(graph)來表示計算任務,圖(graph)中的節點稱之為 op (operation),一個 op 獲得 0 個或多個 Tensor,執行計算,產生 0 個或多個 Tensor。Tensor 看作是一個 n 維的陣列或列表。圖必須
《機器學習實戰》學習筆記(1)——k-近鄰演算法
1 k-近鄰演算法概述 k-近鄰演算法,採用測量不同特徵值之間的距離方法進行分類。 工作原理: 存在一個樣本資料集,也成為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中的每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資
演算法快學筆記(四):快速排序的原理與實現
1. 原理介紹 快速排序是一種排序演算法,速度比選擇排序快得多,其主要基於“分而治之”的思想對集合進行排序,本文將對該演算法進行分析。 2. 分而治之(D&C)的思想 D&C主要指利用遞迴的方式來不斷的縮小需要處理問題的規模,最終使問題容易解決。使用D&C
演算法快學筆記(三):選擇排序的原理與實現
1. 原理介紹 選擇排序是個簡單的排序,思路主要通過多次遍歷待排序的集合,每次彈出最大/小值並放入新的集合,直到原始集合為空。舉個例子: 假設要對A=[1,2,5,9,3]按照升序的方式進行排序,步驟與結果如下 從A中找出最大值,將其pop,並放入B中,執行後的結果如下:
matlab學習筆記(1)——粒子群優化演算法(PSO)的程式實現
本文內容參考matlab R2016a完全自學一本通。 粒子群優化演算法(PSO)屬於進化演算法的一種,它從隨機解出發,通過迭代找到最優解。該演算法通過適應度來評價解的品質,並通過追隨當前搜尋到的最優值來尋找全域性最優。 假設在一個D維的目標搜尋空間
常用排序演算法總結(1)-- 比較排序
我們通常所說的排序演算法往往指的是內部排序演算法,即資料記錄在記憶體中進行排序。 排序演算法大體可分為兩種: 一種是比較排序,時間複雜度O(nlogn) ~ O(n^2),主要有:氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。 另一種是非比較排序,時間複雜度可以達到O(n),
《資料演算法-Hadoop/Spark大資料處理技巧》讀書筆記(一)——二次排序
寫在前面: 在做直播的時候有同學問Spark不是用Scala語言作為開發語言麼,的確是的,從網上查資料的話也會看到大把大把的用Scala編寫的Spark程式,但是仔細看就會發現這些用Scala寫的文章
數字影象處理學習筆記(1)——傅立葉變換在影象處理中的應用
1.理解二維傅立葉變換的定義 1.1二維傅立葉變換 二維Fourier變換: 逆變換: 1.2二維離散傅立葉變換 一個影象尺寸為M×N的 函式的離散傅立葉變換由以下等式給出: 其中 和。其中變數u和v用於確定它們的頻率,頻域系統是由所張成的座標系,其
深度學習tensorflow實戰筆記(1)全連線神經網路(FCN)訓練自己的資料(從txt檔案中讀取)
寫在前面的話:離上一次寫部落格已經有些日子了,以前的工程都是在caffe平臺下做的,caffe平臺雖然挺好用的,但是caffe主要用於做CNN,對於其它的網路模型用起來不太方便,所以博主轉戰tensorflow,Google對待tensorflow就想當年對待An
演算法筆記(三)——分治法(快速排序)
參考了網上大神的理解後,自己也嘗試著寫下傳說中的“快速排序”。 大致思路總結為:挖坑填坑+分治法。 舉個例子:我們對陣列a[9]={6,2,4,3,7,1,5,0,8}進行分析。 首先我們拿陣列中的隨機一個數作為基準數(參照物件,也就是要挖的坑)
Python程式碼筆記(1)輾轉相除法/歐幾里得演算法求最大公約數gcd(m,n)
歐幾里得演算法求最大公約數:輾轉相除法 具體做法:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除除數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,
laravel學習筆記(1)- windows中wamp環境composer使用中openssl問題解決
今天在windows下學習lavaral,使用composer update命令報如下錯誤: [Composer\Exception\NoSslException] The openssl extension is required for SSL/TLS pro