Files
Yudong Jin d7b2277d2b Re-translate the Japanese version (#1871)
* Retranslate Japanese docs with GPT-5.4

* Retranslate Japanese code with GPT-5.4
2026-03-30 07:30:15 +08:00

173 lines
4.4 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* File: time_complexity.swift
* Created Time: 2022-12-26
* Author: nuomi1 (nuomi1@qq.com)
*/
/* */
func constant(n: Int) -> Int {
var count = 0
let size = 100_000
for _ in 0 ..< size {
count += 1
}
return count
}
/* */
func linear(n: Int) -> Int {
var count = 0
for _ in 0 ..< n {
count += 1
}
return count
}
/* */
func arrayTraversal(nums: [Int]) -> Int {
var count = 0
//
for _ in nums {
count += 1
}
return count
}
/* */
func quadratic(n: Int) -> Int {
var count = 0
// n
for _ in 0 ..< n {
for _ in 0 ..< n {
count += 1
}
}
return count
}
/* */
func bubbleSort(nums: inout [Int]) -> Int {
var count = 0 //
// [0, i]
for i in nums.indices.dropFirst().reversed() {
// [0, i]
for j in 0 ..< i {
if nums[j] > nums[j + 1] {
// nums[j] nums[j + 1]
let tmp = nums[j]
nums[j] = nums[j + 1]
nums[j + 1] = tmp
count += 3 // 3
}
}
}
return count
}
/* */
func exponential(n: Int) -> Int {
var count = 0
var base = 1
// 2 1, 2, 4, 8, ..., 2^(n-1)
for _ in 0 ..< n {
for _ in 0 ..< base {
count += 1
}
base *= 2
}
// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1
return count
}
/* */
func expRecur(n: Int) -> Int {
if n == 1 {
return 1
}
return expRecur(n: n - 1) + expRecur(n: n - 1) + 1
}
/* */
func logarithmic(n: Int) -> Int {
var count = 0
var n = n
while n > 1 {
n = n / 2
count += 1
}
return count
}
/* */
func logRecur(n: Int) -> Int {
if n <= 1 {
return 0
}
return logRecur(n: n / 2) + 1
}
/* */
func linearLogRecur(n: Int) -> Int {
if n <= 1 {
return 1
}
var count = linearLogRecur(n: n / 2) + linearLogRecur(n: n / 2)
for _ in stride(from: 0, to: n, by: 1) {
count += 1
}
return count
}
/* */
func factorialRecur(n: Int) -> Int {
if n == 0 {
return 1
}
var count = 0
// 1 n
for _ in 0 ..< n {
count += factorialRecur(n: n - 1)
}
return count
}
@main
enum TimeComplexity {
/* Driver Code */
static func main() {
// n
let n = 8
print("入力データサイズ n = \(n)")
var count = constant(n: n)
print("定数時間の操作回数 = \(count)")
count = linear(n: n)
print("線形時間の操作回数 = \(count)")
count = arrayTraversal(nums: Array(repeating: 0, count: n))
print("線形時間(配列の走査)の操作回数 = \(count)")
count = quadratic(n: n)
print("二乗時間の操作回数 = \(count)")
var nums = Array(stride(from: n, to: 0, by: -1)) // [n,n-1,...,2,1]
count = bubbleSort(nums: &nums)
print("二乗時間(バブルソート)の操作回数 = \(count)")
count = exponential(n: n)
print("指数時間(ループ実装)の操作回数 = \(count)")
count = expRecur(n: n)
print("指数時間(再帰実装)の操作回数 = \(count)")
count = logarithmic(n: n)
print("対数時間(ループ実装)の操作回数 = \(count)")
count = logRecur(n: n)
print("対数時間(再帰実装)の操作回数 = \(count)")
count = linearLogRecur(n: n)
print("線形対数時間(再帰実装)の操作回数 = \(count)")
count = factorialRecur(n: n)
print("階乗時間(再帰実装)の操作回数 = \(count)")
}
}