啊哈,演算法自學記 1st

2022-09-08 03:12:11 字數 1841 閱讀 5804

小哼的班上只有 5 個同學,這 5 個同學分別考了 5 分、 3 分、5 分、 2 分和 8 分,哎考得真是慘不忍睹(滿分是 10 分)。接下來將分數進行從大到小排序,

排序後是 8 5 5 3 2。

#include

/*滿分十分,就建立乙個11個資料的陣列,幾分出現幾次就在對應的陣列下標加一

*最後,幾分出現幾次就按照排序方式列印幾次

*/int

main

(int argc,

char

const

*ar**)

for(j=

0;j<=

10;j++

)//遍歷陣列,從小到大列印

return0;

}

指定輸入資料個數:

#include

intmain

(int argc,

char

const

*ar**)

//開始按照排序方式列印

for(j=

0;j<=

1000

;j++

)//遍歷陣列列印(<=,否則1000不能列印)

return0;

}

上面的方法非常浪費空間!例如需要排序數的範圍是 0~2100000000 之間,那你則需要申請 2100000001 個變數,也就是說要寫成 int a[2100000001]。因為我們需要用 2100000001 個「桶」來儲存 0~2100000000 之間每乙個數出現的次數。即便只給你 5 個數進行排序(例如這 5 個數是 1、1912345678、 2100000000、18000000 和 912345678),你也仍然需要 2100000001 個「桶」,這真是太浪費空間了!還有,如果現在需要排序的不再是整數而是一些小數,比如將

5.56789、 2.12,1.1、 3.123、 4.1234

這五個數進行從小到大排序又該怎麼辦呢?現在我們來學習另一種新的排序演算法:氣泡排序。

排序:8 50 22 6 1 15 100 0 1000 999

原理:比較相鄰的兩位大小,1-2 2-3 3-4 4-5 …

如此迴圈n-1次可以將最大或者最小放到最後一位,再依次遞減迴圈n-i次)i 代表已經被安排的個數

#include

intmain

(int argc,

char

const

*ar**)

//氣泡排序:相鄰互換,每安排一位數需要互換n-1次

for(k=

0;k<

(n-1

);k++

)//n個數排序,迴圈n-1次}}

//列印

for(i=

0;i)//列印n次

return0;

}

排序:

5個人的成績

huhu 5

haha 3

xixi 5

hengheng 2

gaoshou 8

新增乙個結構體,解決:

#include

typedef

struct student

;int

main

(int argc,

char

const

*ar**)

for(i=

0;i1;i++

)//n個資料,迴圈n-1次}}

printf

("result:\r\n");

for(i=

0;i)return0;

}

演算法1 啊哈演算法!

首先這裡會有乙個簡單的排序演算法。問題 0 10內的數排序,假如有五個人的分數為為9,1,2,4,5 思路 include int main for i 0 i 10 i 依次判斷a 0 a 10 for j 1 j a i j 出現了幾次就列印幾次 printf d i getchar getch...

USB學習1 ST微控制器USB簡介

stm32f407 usb otg fs 框圖 usb,英文全稱是universial serial bus 通用序列匯流排 的縮寫,其中文簡稱為通串線,是乙個外部匯流排標準,用於規範電腦與外部裝置的連線和通訊。是應用在pc領域的接 術。usb介面支出裝置的即插即用和熱拔插功能。usb是在1994年...

MySQL分庫分表基礎表介紹 1st

這裡我們模擬乙個 的基本的表結。此結構由 使用者 門店 導購 門店商品 訂單 訂單對應的商品 其中,導購也是乙個使用者,門店是只屬於乙個店主的,同時店主本身也是乙個導購也是乙個普通使用者。結構圖 1 從session中獲得客戶id。2 可以通過時間戳等拼湊乙個訂單id 在建立表的時候為了方便我用自增...