嵌入式Linux C程式設計學習之路(五)——基礎排序演算法
在進行排序演算法時經常用到交換兩個陣列元素的功能,將這個功能單獨寫成一個子函式,採用傳引用呼叫的引數傳遞方式,對陣列元素的地址直接進行操作,達到改變其位置的功能。程式碼如下:
void swap(int*p,int*q)
{
int a;
a=*p;
*p=*q;
*q=a;
}
一:選擇排序
將要排序的物件分作兩部份,一個是已排序的,一個是未排序的,從後端未排序部份選擇一個最小值,並放入前端已排序部份的最後一個。
void slef(int a[]) { int i,j,k; for(i=0;i<9;i++)//選擇第i位,將其他位依次與他相比較 { for(j=1+i;j<10;j++)//其他位選擇 { if(a[j]<=a[i])//當其他的位存在比第i位小的數時, {swap(&a[j],&a[i]);//交換 } } printf("第 %d 次排序:", i+1); for(k = 0; k < 10; k++) printf("%d ", a[k]); printf("\n"); } }
執行結果如下:
[[email protected] paixu]# ./a.out 4 第 1 次排序:6 95 90 49 80 58 27 9 18 50 第 2 次排序:6 9 95 90 80 58 49 27 18 50 第 3 次排序:6 9 18 95 90 80 58 49 27 50 第 4 次排序:6 9 18 27 95 90 80 58 49 50 第 5 次排序:6 9 18 27 49 95 90 80 58 50 第 6 次排序:6 9 18 27 49 50 95 90 80 58 第 7 次排序:6 9 18 27 49 50 58 95 90 80 第 8 次排序:6 9 18 27 49 50 58 80 95 90 第 9 次排序:6 9 18 27 49 50 58 80 90 95
二:插入排序
像是玩樸克一樣,我們將牌分作兩堆,每次從後面一堆的牌抽出最前端的牌,然後插入前面一堆牌的適當位置。
void ins(int a[]) { int i,j,k,tmp; for(j = 1; j < 10; j++) { tmp = a[j]; i=j; while(tmp<a[i-1]) { swap(&a[i],&a[i-1]); i--; if(0==i) break; } printf("第 %d 次排序:", j); for(k = 0; k < 10; k++) printf("%d ", a[k]); printf("\n"); } }
執行結果如下:
[[email protected] paixu]# ./a.out
5
第 1 次排序:27 95 90 49 80 58 6 9 18 50
第 2 次排序:27 90 95 49 80 58 6 9 18 50
第 3 次排序:27 49 90 95 80 58 6 9 18 50
第 4 次排序:27 49 80 90 95 58 6 9 18 50
第 5 次排序:27 49 58 80 90 95 6 9 18 50
第 6 次排序:6 27 49 58 80 90 95 9 18 50
第 7 次排序:6 9 27 49 58 80 90 95 18 50
第 8 次排序:6 9 18 27 49 58 80 90 95 50
第 9 次排序:6 9 18 27 49 50 58 80 90 95
三:氣泡排序法
顧名思義,就是排序時,最大的元素會如同氣泡一樣移至右端,其利用比較相鄰元素的方法,將大的元素交換至右端,所以大的元素會不斷的往右移動,直到適當的位置為止。
void paos(int a[])
{
int i,j,k,f=1;
for(j=0;j<9&&f==1;j++)
{f=0;
for(i=0;i<9-j;i++)
{
if(a[i]>a[i+1])
{
swap(&a[i],&a[i+1]);
f=1; }
}
printf("第 %d 次排序:",j+1);
for(k = 0; k < 10; k++)
printf("%d ", a[k]);
printf("\n");
}
}
執行結果如下 :
[[email protected] paixu]# ./a.out
6
第 1 次排序:27 90 49 80 58 6 9 18 50 95
第 2 次排序:27 49 80 58 6 9 18 50 90 95
第 3 次排序:27 49 58 6 9 18 50 80 90 95
第 4 次排序:27 49 6 9 18 50 58 80 90 95
第 5 次排序:27 6 9 18 49 50 58 80 90 95
第 6 次排序:6 9 18 27 49 50 58 80 90 95
第 7 次排序:6 9 18 27 49 50 58 80 90 95
氣泡排序時,當某次排序不發生陣列元素交換時,則排序位完成,這是即可終止排序以減少程式執行時間,程式碼中通過設定一個標誌符f來判斷是否產生交換。
附:主函式
int main()
{ int b=0;
int a[10]={95,27,90,49,80,58,6,9,18,50};
scanf("%d",&b);
if(4==b)
{
slef(a);
}
if(5==b)
{
ins(a);
}
if(6==b)
{
paos(a);
}
else
{
return 0;
}
}
相關推薦
嵌入式Linux C程式設計學習之路(五)——基礎排序演算法
在進行排序演算法時經常用到交換兩個陣列元素的功能,將這個功能單獨寫成一個子函式,採用傳引用呼叫的引數傳遞方式,對陣列元素的地址直接進行操作,達到改變其位置的功能。程式碼如下: void swap(int*p,int*q) { int a; a=*p;
嵌入式Linux C程式設計學習之路(十三)——標準IO之gets,puts,fprintf,sprintf,fgetc,fputc
1. gets & puts //是行快取的讀寫函式 char *gets(char*s); int puts(constchar *s); gets 與fgets的區別: Ø gets()不能指定快取的長度,這樣就可能造成快取越界(如若該行長於快取長度
嵌入式Linux C程式設計學習之路(七)—— Open/Close函式
1. input & output:站在應用層考慮 Input:核心-->使用者,從核心讀取資料或從檔案讀取資料 ————read函式 Output:使用者-->核心,寫資料到核心或寫資料到檔案中 ————write函式 2. 核心中檔案太多了,寫到
嵌入式Linux C程式設計學習之路(十)——標準IO fopen/fclose
標準IO與檔案IO的對應函式 檔案IO: 標準IO open fopen close
嵌入式Linux C程式設計學習之路(三)——初識GCC
Gcc(GNU C Compiler)是GNU推出的功能強大、效能優越的多平臺編譯器,是GNU的代表作之一。Gcc可以在多種硬體平臺上編譯出可執行程式,其執行效率與一般的編譯器相比平均效率要高20%~30%。 Gcc最基本的用法是∶gcc [opt
嵌入式Linux C程式設計學習之路(二)——常用命令彙總1
一、使用者管理類命令 1:格式:useradd [選項] 使用者名稱 useradd kkkw -新增名字為kkkw的使用者,當用戶建立成功後,會在/home/ 目錄下生成與使用者名稱同名的目錄 [root@loc home]# useradd kkkw [roo
C++再學習之路(五)
我們 實參 對象傳遞 color virtual 轉換 版本 部分 尊重 1.繼承和動態綁定在兩個方面簡化了我們的程序 能夠容易地定義與其他類相似但又不相同的新類,能夠更容易地編寫忽略這些相似類型之間區別的程序 P471 2.之所以稱通過繼承而相關聯的類型為多態類型,
C++再學習之路(二)
iter pointer lin clas 數組元素 對數 表達 自增 條件操作符 1. 移位操作符“ << ”和“ >> ”擁有中等優先級:其優先級比算術操作符低,但比關系操作符、賦值操作符和條件操作符優先級高 2. *iter++ 後自增操作
非同步程式設計學習之路(三)-多執行緒之間的協作與通訊
本文是非同步程式設計學習之路(三)-多執行緒之間的協作與通訊,若要關注前文,請點選傳送門: 非同步程式設計學習之路(二)-通過Synchronize實現執行緒安全的多執行緒 通過前文,我們學習到如何實現同步的多執行緒,但是在很多情況下,僅僅同步是不夠的,還需要執行緒與執行緒協作(通訊),生產
非同步程式設計學習之路(二)-通過Synchronize實現執行緒安全的多執行緒
本文是非同步程式設計學習之路(二)-通過Synchronize實現執行緒安全的多執行緒,若要關注前文,請點選傳送門: 非同步程式設計學習之路(一)-通過Thread實現簡單多執行緒(執行緒不安全) 上篇我們通過Thread實現了幾種執行緒不安全的多執行緒寫法,導致最後的結果與預期的值不一樣。
非同步程式設計學習之路(一)-通過Thread實現簡單多執行緒
自上週主管帶我看過kafka內部實現,使用Feature來做的資料批量傳送之後,自此決定要學好併發程式設計。 因為本人在多執行緒上只能說是一個新手,打算從最底層的Thread一步一步記錄我的學習之路。 通過Thread實現多執行緒的方式有兩種,程式碼如下: 一、多執行緒實現(繼承Thre
Linux命令列學習之路(一)
全為自己總結歸納所得,有不對的地方敬請指出。 首先,我們先來總結一下一些較為實用的命令列快捷鍵 Ctrl+L :清理終端,可以將終端清空 Ctrl+C:中斷當前命令 Shift+PgUp : 向上翻頁,可以檢視以前在命令列中顯示的內容 Shift+PgDn : 向
Linux命令列學習之路(七)——定時執行
對於一些命令我們並不是想讓其馬上執行,而是等待一定時間或者到某個時間再執行,我們需要怎麼做? at命令:延時執行一個程式(通過:apt-get install at 進行安裝) 命令使用方法: 1、輸入:at 【時間】 這個時間可以是具體的時間,例如:at 15:
Linux命令列學習之路(六)——重定向和管道
今天我們來總結一下個人認為linux下最為實用和厲害的重定向和管道 在說今天的重點之前,必須要先學一點其他的新知識:標準輸入(stdin)、標準輸出(stdout)、標準錯誤輸出(stderr) 標準輸入(stdin):程式碼為0,使用<或<< 輸入
Hibernate學習之路(五)
ring int 表示 gen prop generator 需要 blog hibernate 簡述 多對多關系映射 多對多關系映射需要一張中間表來維護關系 一:Role類與Function類 1 publi
PHP學習之路(五)
設有 src fault ... 根據 條件判斷 滿足 循環 獲取 2017.08.13 Day 5 周日 晴 PHP-順序結構 順序結構就像一條直線,按著順序一直往下執行。我們編寫的代碼默認都是按照順序結構執行的。 PHP條件結構之if…else… 條件結
MySQL學習之路(五)MySQL高級查詢
code left 功能 限定查詢 外鏈接 spa size 平均數 asc MySQL統計函數 count():統計數量; max():統計最大值; min():統計最小值; avg():統計平均數; sum():統計和; Select
Hadoop學習之路(五)Hadoop集群搭建模式和各模式問題
數據 場景 模式 問題 沒有 問題: 重裝 故障 style 分布式集群的通用問題 當前的HDFS和YARN都是一主多從的分布式架構,主從節點---管理者和工作者 問題:如果主節點或是管理者宕機了。會出現什麽問題? 群龍無首,整個集群不可用。所以在一主多從的架構中都會
Python學習之路 (五)爬蟲(四)正則表示式爬去名言網
auth Python標準庫 我們 color 匯總 eight code 比較 school 爬蟲的四個主要步驟 明確目標 (要知道你準備在哪個範圍或者網站去搜索) 爬 (將所有的網站的內容全部爬下來) 取 (去掉對我們沒用處的數據) 處理數據(按照我們想要的
Hive學習之路 (五)DbVisualizer配置連接hive
ado lan inf files AD sha comm HR 下載地址 一、安裝DbVisualizer 下載地址http://www.dbvis.com/ 也可以從網上下載破解版程序,此處使用的版本是DbVisualizer 9.1.1 具體的安裝步驟可以百度,