【一點一點寫演算法】之 氣泡排序
演算法描述
氣泡排序,學習演算法的時候最先接觸的,也是最簡單的排序演算法。過於簡單,兩兩比較一輪次比較下來會把較小的數字慢慢浮到上面來。
程式
#include "stdafx.h"
#define N 10
int _tmain(int argc, _TCHAR* argv[])
{
int arra[N] = {54,89,64,321,45,1,648,4615,21321,645};
//大迴圈
for (int i = 0; i < N -1; i++)
{
///小迴圈
for (int j = 0; j < N - i - 1 ; j ++)
{
if(arra[j] > arra[j + 1])
{
int temp = arra[j];
arra[j] = arra[j+1];
arra[j + 1] = temp;
}
}
}
for (int i = 0; i < N; i++)
{
printf("%d\n",arra[i]);
}
getchar();
return 0;
}
程式描述
結果
程式分析
什麼是迴圈?迴圈就是重複做著一件相同的事情。這裡做著相同的事情就是比較。外層迴圈控制比較的輪次,內層迴圈控制兩兩比較次數。
時間複雜度
平方階O(n^2)
相關推薦
【一點一點寫演算法】之 氣泡排序
演算法描述 氣泡排序,學習演算法的時候最先接觸的,也是最簡單的排序演算法。過於簡單,兩兩比較一輪次比較下來會把較小的數字慢慢浮到上面來。 程式 #include "stdafx.h" #define N 10 int _tmain(int arg
【資料結構與演算法】之紅黑樹 --- 第十四篇
樹是一種非線性資料結構,這種資料結構要比線性資料結構複雜的多,因此分為三篇部落格進行講解: 第一篇:樹的基本概念及常用操作的Java實現(二叉樹為例) 第二篇:二叉查詢樹 第三篇:紅黑樹 第三篇:紅黑樹 開篇說明:對於紅黑樹的學習,近階段只需要掌握這種資料結構的思想、特點、適
【資料結構與演算法】之二叉查詢樹 --- 第十三篇
樹是一種非線性資料結構,這種資料結構要比線性資料結構複雜的多,因此分為三篇部落格進行講解: 第一篇:樹的基本概念及常用操作的Java實現(二叉樹為例) 第二篇:二叉查詢樹 第三篇:紅黑樹 本文目錄 1、二叉查詢樹的基本概念 2、二叉查詢樹的查詢操作 3、二叉查詢樹的插
【資料結構與演算法】之樹的基本概念及常用操作的Java實現(二叉樹為例) --- 第十二篇
樹是一種非線性資料結構,這種資料結構要比線性資料結構複雜的多,因此分為三篇部落格進行講解: 第一篇:樹的基本概念及常用操作的Java實現(二叉樹為例) 第二篇:二叉查詢樹 第三篇:紅黑樹 本文目錄: 1、基本概念 1.1 什麼是樹 1.2 樹的
【資料結構與演算法】之複雜度分析---第一篇
一、首先明確兩個問題: 1、為什麼需要對演算法進行復雜度分析? 實際上一個演算法執行所耗費的時間和空間是無法從理論上準確算出來的,必須在計算機上實際執行才知道,但是我們不可能對每個演算法都先在計算機上執行一遍,再決定採用其中效率最高的那個。所以我們就需要從理論上分析出每種
【資料結構與演算法】之單鏈表、雙鏈表、迴圈連結串列的基本介紹及其Java程式碼實現---第三篇
一、連結串列的基本介紹 連結串列的定義:連結串列是一種遞迴的資料結構,它或者為空(null),或者是指向一個結點(node)的引用,該結點含有一個泛型的元素和一個指向另一條連結串列的引用。----Algorithms Fourth Edition 常見的連結串
【資料結構與演算法】之棧的基本介紹及其陣列、連結串列實現---第四篇
一、棧的基本介紹 1、棧的基本概念 棧是一種限制在一端進行插入和刪除操作的線性表資料結構。棧中有兩個比較重要的操作:push(壓棧:將元素壓入棧頂)和pop(彈棧:從棧頂彈出一個元素)。都滿足先進後出、後進先出的特點! 從圖中可以看出,我們常把棧的上面稱為棧
【資料結構與演算法】之佇列的基本介紹及其陣列、連結串列實現---第五篇
一、佇列的基本概念 1、定義 佇列是一種先進先出的線性表。它只允許在表的前端進行刪除操作,而在表的後端進行插入操作,具有先進先出、後進後出的特點。進行插入操作的一端成為隊尾(tail),進行刪除操作的一端稱為隊頭(head)。當佇列中沒有元素時,則稱之為空佇列。 在
【資料結構與演算法】之遞迴的基本介紹---第六篇
一、遞迴的基本概念 1、定義 遞迴:指的是一個過程,函式直接或者間接的呼叫自己,此時則發生了遞迴。 遞迴的兩個要素:遞推公式和遞迴邊界 可以看到遞迴的定義非常的簡潔,但是理解起來就沒有這麼容易了。不知道大家是否和我一樣,在遇到遞迴問題的時候,總是試圖去一步一步的分
【資料結構與演算法】之排序全家桶(十大排序詳解及其Java實現)---第七篇
本篇文章彙總了10種場常見的排序演算法,篇幅較長,可以通過下面的索引目錄進行定位查閱: 7、桶排序 一、排序的基本概念 1、排序的定義 排序:就是使一串記錄,按照其中的某個或者某些關鍵字的大小,遞增或遞減的排列起來
【Python排序搜尋基本演算法】之堆排序
堆是一種完全二叉樹,堆排序是一種樹形選擇排序,利用了大頂堆堆頂元素最大的特點,不斷取出最大元素,並調整使剩下的元素還是大頂堆,依次取出最大元素就是排好序的列表。舉例如下,把序列[26,5,77,1,61,11,59,15,48,19]排序,如下:
【Python排序搜尋基本演算法】之歸併排序
歸併排序最令人興奮的特點是:不論輸入是什麼樣的,它對N個元素的序列排序所用時間與NlogN成正比。程式碼如下: def mergesort(seq): if len(seq)<
一步一步寫演算法(之選擇排序)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 選擇排序是和氣泡排序差不多的一種排序。和氣泡排序交換相連資料不一樣的是,選擇排序只有在確定了最小的資料之後,才會發生交換。怎麼交換呢?我們可以以下面一組資料作為測試:
排序演算法入門之氣泡排序
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興! 在開發中,對一組資料進行有序地排列是經常需要做的事情,所以掌握幾種甚至更多的排序演算法是絕對有必要的本文章介紹的是排序演算法中較簡單的一種演算法:氣泡排序題外話
一步一步寫演算法(之基數排序)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 基數排序是另外一種比較有特色的排序方式,它是怎麼排序的呢?我們可以按照下面的一組數字做出說明:12、 104、 13、 7、 9 (1)按個位數排序是
一步一步寫演算法(之合併排序)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 前面一篇部落格提到的快速排序是排序演算法中的一種經典演算法。和快速排序一樣,合併排序是另外一種經常使用的排序演算法。那麼合併排序演算法有什麼不同呢?關鍵之處就
Java演算法實現之氣泡排序及優化
氣泡排序,是一種很簡單的排序演算法。原理就不過多介紹了,直接入手demo。 需求:輸入一組資料,用氣泡排序進行排序。 先用最直接的方法進行排序,程式碼如下: //對一組數進行氣泡排序 public class Bubble01 { public static void m
經典演算法體會之氣泡排序
通過java語法理解氣泡排序,原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣一趟過去後,最大或最小的數字被交換到了最後一位,然後再從頭開始進行兩兩比較交換,直到倒數第二位
【大話資料結構&演算法】直接插入排序
直接插入排序的基本思想:每趟將一個待排元素作為關鍵字,按照其關鍵字值得大小插入到已經排好序的部分序列的適當位置,直到插入完成。 演算法思想總結如下:(設待排序的陣列為a[0…n-1]) 1
一步一步寫演算法(之堆排序)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 堆排序是另外一種常用的遞迴排序。因為堆排序有著優秀的排序效能,所以在軟體設計中也經常使用。堆排序有著屬於自己的特殊性質,和二叉平衡樹基本是一致的。打一個比方說