mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-12 16:52:29 +08:00
839 lines
220 KiB
HTML
839 lines
220 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN" dir="ltr">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||
<title>Algorithm | Lancet</title>
|
||
<meta name="description" content="一个强大的Go语言工具函数库">
|
||
<link rel="preload stylesheet" href="/assets/style.d1d977d1.css" as="style">
|
||
|
||
<script type="module" src="/assets/app.f092503e.js"></script>
|
||
<link rel="preload" href="/assets/inter-roman-latin.2ed14f66.woff2" as="font" type="font/woff2" crossorigin="">
|
||
<link rel="modulepreload" href="/assets/chunks/framework.6e839c56.js">
|
||
<link rel="modulepreload" href="/assets/chunks/theme.3c09d9a6.js">
|
||
<link rel="modulepreload" href="/assets/api_packages_algorithm.md.ed237cde.lean.js">
|
||
<link rel="icon" type="image/png" href="/lancet_logo_mini.png">
|
||
<meta name="theme-color" content="#5f67ee">
|
||
<meta name="og:type" content="website">
|
||
<meta name="og:locale" content="zh">
|
||
<script id="check-dark-light">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"dark",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||
<meta property="og:url" content="https://lancet.dev">
|
||
<meta property="og:description" content="一个强大的Go语言工具函数库">
|
||
<meta property="twitter:url" content="https://lancet.dev">
|
||
<meta property="twitter:title" content="Lancet">
|
||
<meta property="twitter:description" content="一个强大的Go语言工具函数库">
|
||
</head>
|
||
<body>
|
||
<div id="app"><div class="Layout" data-v-324e8308><!--[--><!--]--><!--[--><span tabindex="-1" data-v-9c8615dd></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-9c8615dd> Skip to content </a><!--]--><!----><header class="VPNav" data-v-324e8308 data-v-5bdc5df3><div class="VPNavBar has-sidebar" data-v-5bdc5df3 data-v-c8ceaf10><div class="container" data-v-c8ceaf10><div class="title" data-v-c8ceaf10><div class="VPNavBarTitle has-sidebar" data-v-c8ceaf10 data-v-2973dbb4><a class="title" href="/" data-v-2973dbb4><!--[--><!--]--><!--[--><img class="VPImage logo" src="/lancet_logo_mini.png" width="24" height="24" alt data-v-ab19afbb><!--]--><!--[-->Lancet<!--]--><!--[--><!--]--></a></div></div><div class="content" data-v-c8ceaf10><div class="curtain" data-v-c8ceaf10></div><div class="content-body" data-v-c8ceaf10><!--[--><!--]--><div class="VPNavBarSearch search" style="--vp-meta-key:'Meta';" data-v-c8ceaf10><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg class="DocSearch-Search-Icon" width="20" height="20" viewBox="0 0 20 20" aria-label="search icon"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-c8ceaf10 data-v-f732b5d0><span id="main-nav-aria-label" class="visually-hidden" data-v-f732b5d0>Main Navigation</span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/" tabindex="0" data-v-f732b5d0 data-v-e5ab8091><!--[--><span data-v-e5ab8091>首页</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/guide/introduction.html" tabindex="0" data-v-f732b5d0 data-v-e5ab8091><!--[--><span data-v-e5ab8091>指南</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/api/overview.html" tabindex="0" data-v-f732b5d0 data-v-e5ab8091><!--[--><span data-v-e5ab8091>API</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-f732b5d0 data-v-6b19ffdd><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-6b19ffdd><span class="text" data-v-6b19ffdd><!----><span data-v-6b19ffdd>相关链接</span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-6b19ffdd><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-6b19ffdd><div class="VPMenu" data-v-6b19ffdd data-v-e42ed9b3><div class="items" data-v-e42ed9b3><!--[--><!--[--><div class="VPMenuLink" data-v-e42ed9b3 data-v-2a4d50e5><a class="VPLink link vp-external-link-icon" href="https://github.com/duke-git/lancet/releases" target="_blank" rel="noreferrer" data-v-2a4d50e5><!--[-->更新日志<!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><div class="VPFlyout VPNavBarTranslations translations" data-v-c8ceaf10 data-v-ff4524ae data-v-6b19ffdd><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="Change language" data-v-6b19ffdd><span class="text" data-v-6b19ffdd><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="option-icon" data-v-6b19ffdd><path d="M0 0h24v24H0z" fill="none"></path><path d=" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z " class="css-c4d79v"></path></svg><!----><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="text-icon" data-v-6b19ffdd><path d="M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"></path></svg></span></button><div class="menu" data-v-6b19ffdd><div class="VPMenu" data-v-6b19ffdd data-v-e42ed9b3><!----><!--[--><!--[--><div class="items" data-v-ff4524ae><p class="title" data-v-ff4524ae>简体中文</p><!--[--><div class="VPMenuLink" data-v-ff4524ae data-v-2a4d50e5><a class="VPLink link" href="/en/api/packages/algorithm.html" data-v-2a4d50e5><!--[-->English<!--]--></a></div><!--]--></div><!--]--><!--]--></div></div></div><div class="VPNavBarAppearance appearance" data-v-c8ceaf10 data-v-5e9f0637><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-5e9f0637 data-v-a99ed743 data-v-92d8f6fb><span class="check" data-v-92d8f6fb><span class="icon" data-v-92d8f6fb><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-a99ed743><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-a99ed743><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-c8ceaf10 data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/duke-git/lancet" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-16cf740a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-c8ceaf10 data-v-c8c2ae4b data-v-6b19ffdd><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-6b19ffdd><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="icon" data-v-6b19ffdd><circle cx="12" cy="12" r="2"></circle><circle cx="19" cy="12" r="2"></circle><circle cx="5" cy="12" r="2"></circle></svg></button><div class="menu" data-v-6b19ffdd><div class="VPMenu" data-v-6b19ffdd data-v-e42ed9b3><!----><!--[--><!--[--><div class="group translations" data-v-c8c2ae4b><p class="trans-title" data-v-c8c2ae4b>简体中文</p><!--[--><div class="VPMenuLink" data-v-c8c2ae4b data-v-2a4d50e5><a class="VPLink link" href="/en/api/packages/algorithm.html" data-v-2a4d50e5><!--[-->English<!--]--></a></div><!--]--></div><div class="group" data-v-c8c2ae4b><div class="item appearance" data-v-c8c2ae4b><p class="label" data-v-c8c2ae4b>Appearance</p><div class="appearance-action" data-v-c8c2ae4b><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title="toggle dark mode" aria-checked="false" data-v-c8c2ae4b data-v-a99ed743 data-v-92d8f6fb><span class="check" data-v-92d8f6fb><span class="icon" data-v-92d8f6fb><!--[--><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="sun" data-v-a99ed743><path d="M12,18c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6S15.3,18,12,18zM12,8c-2.2,0-4,1.8-4,4c0,2.2,1.8,4,4,4c2.2,0,4-1.8,4-4C16,9.8,14.2,8,12,8z"></path><path d="M12,4c-0.6,0-1-0.4-1-1V1c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,3.6,12.6,4,12,4z"></path><path d="M12,24c-0.6,0-1-0.4-1-1v-2c0-0.6,0.4-1,1-1s1,0.4,1,1v2C13,23.6,12.6,24,12,24z"></path><path d="M5.6,6.6c-0.3,0-0.5-0.1-0.7-0.3L3.5,4.9c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C6.2,6.5,5.9,6.6,5.6,6.6z"></path><path d="M19.8,20.8c-0.3,0-0.5-0.1-0.7-0.3l-1.4-1.4c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l1.4,1.4c0.4,0.4,0.4,1,0,1.4C20.3,20.7,20,20.8,19.8,20.8z"></path><path d="M3,13H1c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S3.6,13,3,13z"></path><path d="M23,13h-2c-0.6,0-1-0.4-1-1s0.4-1,1-1h2c0.6,0,1,0.4,1,1S23.6,13,23,13z"></path><path d="M4.2,20.8c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C4.7,20.7,4.5,20.8,4.2,20.8z"></path><path d="M18.4,6.6c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l1.4-1.4c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-1.4,1.4C18.9,6.5,18.6,6.6,18.4,6.6z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="moon" data-v-a99ed743><path d="M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"></path></svg><!--]--></span></span></button></div></div></div><div class="group" data-v-c8c2ae4b><div class="item social-links" data-v-c8c2ae4b><div class="VPSocialLinks social-links-list" data-v-c8c2ae4b data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="https://github.com/duke-git/lancet" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-16cf740a><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-c8ceaf10 data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><!----></header><div class="VPLocalNav reached-top" data-v-324e8308 data-v-693d654a><button class="menu" aria-expanded="false" aria-controls="VPSidebarNav" data-v-693d654a><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="menu-icon" data-v-693d654a><path d="M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"></path><path d="M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"></path><path d="M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"></path><path d="M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"></path></svg><span class="menu-text" data-v-693d654a>Menu</span></button><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-693d654a data-v-e8ae7d87><button data-v-e8ae7d87>Return to top</button><!----></div></div><aside class="VPSidebar" data-v-324e8308 data-v-b04a928c><div class="curtain" data-v-b04a928c></div><nav class="nav" id="VPSidebarNav" aria-labelledby="sidebar-aria-label" tabindex="-1" data-v-b04a928c><span class="visually-hidden" id="sidebar-aria-label" data-v-b04a928c> Sidebar Navigation </span><!--[--><!--]--><!--[--><div class="group" data-v-b04a928c><section class="VPSidebarItem level-0" data-v-b04a928c data-v-c356ab37><div class="item" role="button" tabindex="0" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><h2 class="text" data-v-c356ab37>概览</h2><!----></div><div class="items" data-v-c356ab37><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/overview.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>API概述</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><div class="group" data-v-b04a928c><section class="VPSidebarItem level-0 collapsible has-active" data-v-b04a928c data-v-c356ab37><div class="item" role="button" tabindex="0" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><h2 class="text" data-v-c356ab37>API文档</h2><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-c356ab37><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-c356ab37><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-c356ab37><!--[--><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/algorithm.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>算法</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/compare.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>比较器</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/concurrency.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>并发处理</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/condition.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>条件判断</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/convertor.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>类型转换</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/cryptor.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>加密&解密</p><!--]--></a><!----></div><!----></div><section class="VPSidebarItem level-1 collapsible collapsed" data-v-c356ab37 data-v-c356ab37><div class="item" role="button" tabindex="0" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><h3 class="text" data-v-c356ab37>数据结构</h3><div class="caret" role="button" aria-label="toggle section" tabindex="0" data-v-c356ab37><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" viewbox="0 0 24 24" class="caret-icon" data-v-c356ab37><path d="M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"></path></svg></div></div><div class="items" data-v-c356ab37><!--[--><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/list.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>线性表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/copyonwritelist.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>线性表(线程安全)</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/link.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>链表</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/stack.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>栈</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/queue.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>队列</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/heap.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>堆</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/tree.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>树</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/set.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>集合</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-2 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datastructure/hashmap.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>HashMap</p><!--]--></a><!----></div><!----></div><!--]--></div></section><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/datetime.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>日期&时间</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/fileutil.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>文件</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/formatter.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>格式化工具</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/function.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>函数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/mathutil.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>数学工具</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/maputil.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>Map</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/netutil.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>网络</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/pointer.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>指针</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/random.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>随机数</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/retry.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>重试</p><!--]--></a><!----></div><!----></div><div class="VPSidebarItem level-1 is-link" data-v-c356ab37 data-v-c356ab37><div class="item" data-v-c356ab37><div class="indicator" data-v-c356ab37></div><a class="VPLink link link" href="/api/packages/slice.html" data-v-c356ab37><!--[--><p class="text" data-v-c356ab37>切片</p><!--]--></a><!----></div><!----></div><!--]--></div></section></div><!--]--><!--[--><!--]--></nav></aside><div class="VPContent has-sidebar" id="VPContent" data-v-324e8308 data-v-3cf691b6><div class="VPDoc has-sidebar has-aside" data-v-3cf691b6 data-v-a3c25e27><!--[--><!--]--><div class="container" data-v-a3c25e27><div class="aside" data-v-a3c25e27><div class="aside-curtain" data-v-a3c25e27></div><div class="aside-container" data-v-a3c25e27><div class="aside-content" data-v-a3c25e27><div class="VPDocAside" data-v-a3c25e27 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><div class="VPDocAsideOutline" data-v-cb998dce data-v-c834746b><div class="content" data-v-c834746b><div class="outline-marker" data-v-c834746b></div><div class="outline-title" data-v-c834746b>本页内容</div><nav aria-labelledby="doc-outline-aria-label" data-v-c834746b><span class="visually-hidden" id="doc-outline-aria-label" data-v-c834746b> Table of Contents for current page </span><ul class="root" data-v-c834746b data-v-463da30f><!--[--><!--]--></ul></nav></div></div><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-a3c25e27><div class="content-container" data-v-a3c25e27><!--[--><!--]--><!----><main class="main" data-v-a3c25e27><div style="position:relative;" class="vp-doc _api_packages_algorithm" data-v-a3c25e27><div><h1 id="Algorithm" tabindex="-1">Algorithm <a class="header-anchor" href="#Algorithm" aria-label="Permalink to "Algorithm""></a></h1><p>algorithm 算法包实现一些基本算法,sort,search,lrucache。</p><div STYLE="page-break-after: always;"></div><h2 id="源码" tabindex="-1">源码 <a class="header-anchor" href="#源码" aria-label="Permalink to "源码""></a></h2><ul><li><a href="https://github.com/duke-git/lancet/blob/main/algorithm/sort.go" target="_blank" rel="noreferrer">https://github.com/duke-git/lancet/blob/main/algorithm/sort.go</a></li><li><a href="https://github.com/duke-git/lancet/blob/main/algorithm/search.go" target="_blank" rel="noreferrer">https://github.com/duke-git/lancet/blob/main/algorithm/search.go</a></li><li><a href="https://github.com/duke-git/lancet/blob/main/algorithm/lru_cache.go" target="_blank" rel="noreferrer">https://github.com/duke-git/lancet/blob/main/algorithm/lru_cache.go</a></li></ul><div STYLE="page-break-after: always;"></div><h2 id="用法" tabindex="-1">用法 <a class="header-anchor" href="#用法" aria-label="Permalink to "用法""></a></h2><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span></code></pre></div><div STYLE="page-break-after: always;"></div><h2 id="目录" tabindex="-1">目录 <a class="header-anchor" href="#目录" aria-label="Permalink to "目录""></a></h2><ul><li><a href="#BubbleSort">BubbleSort</a></li><li><a href="#InsertionSort">InsertionSort</a></li><li><a href="#SelectionSort">SelectionSort</a></li><li><a href="#ShellSort">ShellSort</a></li><li><a href="#QuickSort">QuickSort</a></li><li><a href="#HeapSort">HeapSort</a></li><li><a href="#MergeSort">MergeSort</a></li><li><a href="#CountSort">CountSort</a></li><li><a href="#BinarySearch">BinarySearch</a></li><li><a href="#BinaryIterativeSearch">BinaryIterativeSearch</a></li><li><a href="#LinearSearch">LinearSearch</a></li><li><a href="#LRUCache">LRUCache</a></li></ul><div STYLE="page-break-after: always;"></div><link rel="stylesheet" type="text/css" href="/styles/api_doc.css"><h2 id="文档" tabindex="-1">文档 <a class="header-anchor" href="#文档" aria-label="Permalink to "文档""></a></h2><h3 id="BubbleSort" tabindex="-1"><span id="BubbleSort">BubbleSort</span> <a class="header-anchor" href="#BubbleSort" aria-label="Permalink to "<span id="BubbleSort">BubbleSort</span>""></a></h3><p>冒泡排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> BubbleSort[T any](slice []T, comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> BubbleSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/GNdv7Jg2Taj" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">BubbleSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(numbers)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">BubbleSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="InsertionSort" tabindex="-1"><span id="InsertionSort">InsertionSort</span> <a class="header-anchor" href="#InsertionSort" aria-label="Permalink to "<span id="InsertionSort">InsertionSort</span>""></a></h3><p>插入排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> InsertionSort[T any](slice []T, comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> InsertionSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/G5LJiWgJJW6" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">people</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> Name </span><span style="color:#97E1F1;font-style:italic;">string</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> Age </span><span style="color:#97E1F1;font-style:italic;">int</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#7B7F8B;">// PeopleAageComparator sort people slice by age field</span></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">peopleAgeComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#7B7F8B;">// Compare implements github.com/duke-git/lancet/lancetconstraints/constraints.go/Comparator</span></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (pc </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">peopleAgeComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> p1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(people)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> p2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(people)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> p1.Age </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> p2.Age {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> p1.Age </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> p2.Age {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> peoples </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []people{</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> {Name: </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">a</span><span style="color:#DEE492;">"</span><span style="color:#F6F6F4;">, Age: </span><span style="color:#BF9EEE;">20</span><span style="color:#F6F6F4;">},</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> {Name: </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">b</span><span style="color:#DEE492;">"</span><span style="color:#F6F6F4;">, Age: </span><span style="color:#BF9EEE;">10</span><span style="color:#F6F6F4;">},</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> {Name: </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">c</span><span style="color:#DEE492;">"</span><span style="color:#F6F6F4;">, Age: </span><span style="color:#BF9EEE;">17</span><span style="color:#F6F6F4;">},</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> {Name: </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">d</span><span style="color:#DEE492;">"</span><span style="color:#F6F6F4;">, Age: </span><span style="color:#BF9EEE;">8</span><span style="color:#F6F6F4;">},</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> {Name: </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">e</span><span style="color:#DEE492;">"</span><span style="color:#F6F6F4;">, Age: </span><span style="color:#BF9EEE;">28</span><span style="color:#F6F6F4;">},</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">peopleAgeComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">InsertionSort</span><span style="color:#F6F6F4;">(peoples, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(peoples)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [{d 8} {b 10} {c 17} {a 20} {e 28}]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">people</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> Name </span><span style="color:#AB5959;">string</span></span>
|
||
<span class="line"><span style="color:#393A34;"> Age </span><span style="color:#AB5959;">int</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A0ADA0;">// PeopleAageComparator sort people slice by age field</span></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">peopleAgeComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#A0ADA0;">// Compare implements github.com/duke-git/lancet/lancetconstraints/constraints.go/Comparator</span></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">pc </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">peopleAgeComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">p1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#393A34;">people</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">p2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#393A34;">people</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> p1</span><span style="color:#999999;">.</span><span style="color:#393A34;">Age </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> p2</span><span style="color:#999999;">.</span><span style="color:#393A34;">Age </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> p1</span><span style="color:#999999;">.</span><span style="color:#393A34;">Age </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> p2</span><span style="color:#999999;">.</span><span style="color:#393A34;">Age </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">peoples</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#393A34;">people</span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">{</span><span style="color:#393A34;">Name</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#B56959;">a</span><span style="color:#B5695999;">"</span><span style="color:#999999;">,</span><span style="color:#393A34;"> Age</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">20</span><span style="color:#999999;">},</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">{</span><span style="color:#393A34;">Name</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#B56959;">b</span><span style="color:#B5695999;">"</span><span style="color:#999999;">,</span><span style="color:#393A34;"> Age</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">10</span><span style="color:#999999;">},</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">{</span><span style="color:#393A34;">Name</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#B56959;">c</span><span style="color:#B5695999;">"</span><span style="color:#999999;">,</span><span style="color:#393A34;"> Age</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">17</span><span style="color:#999999;">},</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">{</span><span style="color:#393A34;">Name</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#B56959;">d</span><span style="color:#B5695999;">"</span><span style="color:#999999;">,</span><span style="color:#393A34;"> Age</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">8</span><span style="color:#999999;">},</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">{</span><span style="color:#393A34;">Name</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#B56959;">e</span><span style="color:#B5695999;">"</span><span style="color:#999999;">,</span><span style="color:#393A34;"> Age</span><span style="color:#999999;">:</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">28</span><span style="color:#999999;">},</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">peopleAgeComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">InsertionSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">peoples</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">peoples</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [{d 8} {b 10} {c 17} {a 20} {e 28}]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="SelectionSort" tabindex="-1"><span id="SelectionSort">SelectionSort</span> <a class="header-anchor" href="#SelectionSort" aria-label="Permalink to "<span id="SelectionSort">SelectionSort</span>""></a></h3><p>选择排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> SelectionSort[T any](slice []T, comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> SelectionSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/oXovbkekayS" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">SelectionSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(numbers)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">SelectionSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="ShellSort" tabindex="-1"><span id="ShellSort">ShellSort</span> <a class="header-anchor" href="#ShellSort" aria-label="Permalink to "<span id="ShellSort">ShellSort</span>""></a></h3><p>希尔排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> ShellSort[T any](slice []T, comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> ShellSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/3ibkszpJEu3" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">ShellSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(numbers)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">ShellSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="QuickSort" tabindex="-1"><span id="QuickSort">QuickSort</span> <a class="header-anchor" href="#QuickSort" aria-label="Permalink to "<span id="QuickSort">QuickSort</span>""></a></h3><p>快速排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> QuickSort[T any](slice []T comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> QuickSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/7Y7c1Elk3ax" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">QuickSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(numbers)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">QuickSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="HeapSort" tabindex="-1"><span id="HeapSort">HeapSort</span> <a class="header-anchor" href="#HeapSort" aria-label="Permalink to "<span id="HeapSort">HeapSort</span>""></a></h3><p>堆排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> HeapSort[T any](slice []T, comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> HeapSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/u6Iwa1VZS_f" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">HeapSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(numbers)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">HeapSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="MergeSort" tabindex="-1"><span id="MergeSort">MergeSort</span> <a class="header-anchor" href="#MergeSort" aria-label="Permalink to "<span id="MergeSort">MergeSort</span>""></a></h3><p>归并排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> MergeSort[T any](slice []T, comparator lancetconstraints.Comparator)</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> MergeSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/ydinn9YzUJn" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">MergeSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(numbers)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">MergeSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="CountSort" tabindex="-1"><span id="CountSort">CountSort</span> <a class="header-anchor" href="#CountSort" aria-label="Permalink to "<span id="CountSort">CountSort</span>""></a></h3><p>计数排序,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> CountSort[T any](slice []T, comparator lancetconstraints.Comparator) []T</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> CountSort</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/tB-Umgm0DrP" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> sortedNums </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">CountSort</span><span style="color:#F6F6F4;">(numbers, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(sortedNums)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">sortedNums</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">CountSort</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">sortedNums</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// [1 2 3 4 5 6]</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="BinarySearch" tabindex="-1"><span id="BinarySearch">BinarySearch</span> <a class="header-anchor" href="#BinarySearch" aria-label="Permalink to "<span id="BinarySearch">BinarySearch</span>""></a></h3><p>二分递归查找,返回元素索引,未找到元素返回-1,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> BinarySearch[T any](sortedSlice []T, target T, lowIndex, highIndex </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">, comparator lancetconstraints.Comparator) </span><span style="color:#97E1F1;font-style:italic;">int</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> BinarySearch</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">sortedSlice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> target T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> lowIndex</span><span style="color:#999999;">,</span><span style="color:#393A34;"> highIndex </span><span style="color:#AB5959;">int</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span></span></code></pre></div><p><b>示例: <span class="run-container"><a href="https://go.dev/play/p/t6MeGiUSN47" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">7</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">8</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result1 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">BinarySearch</span><span style="color:#F6F6F4;">(numbers, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">0</span><span style="color:#F6F6F4;">, </span><span style="color:#97E1F1;">len</span><span style="color:#F6F6F4;">(numbers)</span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, comparator)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result2 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">BinarySearch</span><span style="color:#F6F6F4;">(numbers, </span><span style="color:#BF9EEE;">9</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">0</span><span style="color:#F6F6F4;">, </span><span style="color:#97E1F1;">len</span><span style="color:#F6F6F4;">(numbers)</span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result1)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result2)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 4</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// -1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">7</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">8</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result1</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">BinarySearch</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#998418;">len</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result2</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">BinarySearch</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">9</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#998418;">len</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result1</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 4</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// -1</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="BinaryIterativeSearch" tabindex="-1"><span id="BinaryIterativeSearch">BinaryIterativeSearch</span> <a class="header-anchor" href="#BinaryIterativeSearch" aria-label="Permalink to "<span id="BinaryIterativeSearch">BinaryIterativeSearch</span>""></a></h3><p>二分迭代查找,返回元素索引,未找到元素返回-1,参数comparator需要实现包lancetconstraints.Comparator。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> BinaryIterativeSearch[T any](sortedSlice []T, target T, lowIndex, highIndex </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">, comparator lancetconstraints.Comparator) </span><span style="color:#97E1F1;font-style:italic;">int</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> BinaryIterativeSearch</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">sortedSlice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> target T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> lowIndex</span><span style="color:#999999;">,</span><span style="color:#393A34;"> highIndex </span><span style="color:#AB5959;">int</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator lancetconstraints</span><span style="color:#999999;">.</span><span style="color:#393A34;">Comparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span></span></code></pre></div><p><b>示例: <span class="run-container"><a href="https://go.dev/play/p/Anozfr8ZLH3" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">type</span><span style="color:#F6F6F4;"> </span><span style="color:#97E1F1;font-style:italic;">intComparator</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">struct</span><span style="color:#F6F6F4;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (c </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">intComparator) </span><span style="color:#62E884;">Compare</span><span style="color:#F6F6F4;">(v1 any, v2 any) </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val1, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v1.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> val2, _ </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> v2.(</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;"><</span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> } </span><span style="color:#F286C4;">else</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">if</span><span style="color:#F6F6F4;"> val1 </span><span style="color:#F286C4;">></span><span style="color:#F6F6F4;"> val2 {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> </span><span style="color:#BF9EEE;">0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">7</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">8</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> comparator </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">&</span><span style="color:#F6F6F4;">intComparator{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result1 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">BinaryIterativeSearch</span><span style="color:#F6F6F4;">(numbers, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">0</span><span style="color:#F6F6F4;">, </span><span style="color:#97E1F1;">len</span><span style="color:#F6F6F4;">(numbers)</span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, comparator)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result2 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">BinaryIterativeSearch</span><span style="color:#F6F6F4;">(numbers, </span><span style="color:#BF9EEE;">9</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">0</span><span style="color:#F6F6F4;">, </span><span style="color:#97E1F1;">len</span><span style="color:#F6F6F4;">(numbers)</span><span style="color:#F286C4;">-</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, comparator)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result1)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result2)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 4</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// -1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">type</span><span style="color:#393A34;"> </span><span style="color:#2E8F82;">intComparator</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">struct</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">c </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Compare</span><span style="color:#999999;">(</span><span style="color:#393A34;">v1 any</span><span style="color:#999999;">,</span><span style="color:#393A34;"> v2 any</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v1</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">val2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">_</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> v2</span><span style="color:#999999;">.(</span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">//ascending order</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;"><</span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">else</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">if</span><span style="color:#393A34;"> val1 </span><span style="color:#AB5959;">></span><span style="color:#393A34;"> val2 </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">7</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">8</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">comparator</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">&</span><span style="color:#393A34;">intComparator</span><span style="color:#999999;">{}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result1</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">BinaryIterativeSearch</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#998418;">len</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result2</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">BinaryIterativeSearch</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">9</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">0</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#998418;">len</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">)</span><span style="color:#AB5959;">-</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> comparator</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result1</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 4</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// -1</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="LinearSearch" tabindex="-1"><span id="LinearSearch">LinearSearch</span> <a class="header-anchor" href="#LinearSearch" aria-label="Permalink to "<span id="LinearSearch">LinearSearch</span>""></a></h3><p>基于传入的相等函数线性查找元素,返回元素索引,未找到元素返回-1。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> LinearSearch[T any](slice []T, target T, equal </span><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;">(a, b T) </span><span style="color:#97E1F1;font-style:italic;">bool</span><span style="color:#F6F6F4;">) </span><span style="color:#97E1F1;font-style:italic;">int</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> LinearSearch</span><span style="color:#999999;">[</span><span style="color:#393A34;">T any</span><span style="color:#999999;">](</span><span style="color:#393A34;">slice </span><span style="color:#999999;">[]</span><span style="color:#393A34;">T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> target T</span><span style="color:#999999;">,</span><span style="color:#393A34;"> equal </span><span style="color:#1E754F;">func</span><span style="color:#999999;">(</span><span style="color:#393A34;">a</span><span style="color:#999999;">,</span><span style="color:#393A34;"> b T</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">bool</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span></span></code></pre></div><p><b>示例: <span class="run-container"><a href="https://go.dev/play/p/IsS7rgn5s3x" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> numbers </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> []</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">{</span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">4</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">5</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> equalFunc </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;">(a, b </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">) </span><span style="color:#97E1F1;font-style:italic;">bool</span><span style="color:#F6F6F4;"> {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#F286C4;">return</span><span style="color:#F6F6F4;"> a </span><span style="color:#F286C4;">==</span><span style="color:#F6F6F4;"> b</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> }</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result1 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">LinearSearch</span><span style="color:#F6F6F4;">(numbers, </span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">, equalFunc)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result2 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.</span><span style="color:#97E1F1;">LinearSearch</span><span style="color:#F6F6F4;">(numbers, </span><span style="color:#BF9EEE;">6</span><span style="color:#F6F6F4;">, equalFunc)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result1)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result2)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 0</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// -1</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">numbers</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#999999;">[]</span><span style="color:#AB5959;">int</span><span style="color:#999999;">{</span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">4</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">5</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">equalFunc</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> </span><span style="color:#1E754F;">func</span><span style="color:#999999;">(</span><span style="color:#393A34;">a</span><span style="color:#999999;">,</span><span style="color:#393A34;"> b </span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">bool</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#1E754F;">return</span><span style="color:#393A34;"> a </span><span style="color:#AB5959;">==</span><span style="color:#393A34;"> b</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#999999;">}</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result1</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">LinearSearch</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> equalFunc</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result2</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#998418;">LinearSearch</span><span style="color:#999999;">(</span><span style="color:#393A34;">numbers</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">6</span><span style="color:#999999;">,</span><span style="color:#393A34;"> equalFunc</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result1</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 0</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// -1</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div><h3 id="LRUCache" tabindex="-1"><span id="LRUCache">LRUCache</span> <a class="header-anchor" href="#LRUCache" aria-label="Permalink to "<span id="LRUCache">LRUCache</span>""></a></h3><p>lru算法实现缓存。</p><p><b>函数签名:</b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> NewLRUCache[K comparable, V any](capacity </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">) </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">LRUCache[K, V]</span></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (l </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">LRUCache[K, V]) </span><span style="color:#62E884;">Get</span><span style="color:#F6F6F4;">(key K) (V, </span><span style="color:#97E1F1;font-style:italic;">bool</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (l </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">LRUCache[K, V]) </span><span style="color:#62E884;">Put</span><span style="color:#F6F6F4;">(key K, value V)</span></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (l </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">LRUCache[K, V]) </span><span style="color:#62E884;">Delete</span><span style="color:#F6F6F4;">(key K) </span><span style="color:#97E1F1;font-style:italic;">bool</span></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> (l </span><span style="color:#F286C4;">*</span><span style="color:#F6F6F4;">LRUCache[K, V]) </span><span style="color:#62E884;">Len</span><span style="color:#F6F6F4;">() </span><span style="color:#97E1F1;font-style:italic;">int</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> NewLRUCache</span><span style="color:#999999;">[</span><span style="color:#393A34;">K comparable</span><span style="color:#999999;">,</span><span style="color:#393A34;"> V any</span><span style="color:#999999;">](</span><span style="color:#393A34;">capacity </span><span style="color:#AB5959;">int</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">LRUCache</span><span style="color:#999999;">[</span><span style="color:#393A34;">K</span><span style="color:#999999;">,</span><span style="color:#393A34;"> V</span><span style="color:#999999;">]</span></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">l </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">LRUCache</span><span style="color:#999999;">[</span><span style="color:#393A34;">K</span><span style="color:#999999;">,</span><span style="color:#393A34;"> V</span><span style="color:#999999;">])</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Get</span><span style="color:#999999;">(</span><span style="color:#393A34;">key K</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">V</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">bool</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">l </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">LRUCache</span><span style="color:#999999;">[</span><span style="color:#393A34;">K</span><span style="color:#999999;">,</span><span style="color:#393A34;"> V</span><span style="color:#999999;">])</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Put</span><span style="color:#999999;">(</span><span style="color:#393A34;">key K</span><span style="color:#999999;">,</span><span style="color:#393A34;"> value V</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">l </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">LRUCache</span><span style="color:#999999;">[</span><span style="color:#393A34;">K</span><span style="color:#999999;">,</span><span style="color:#393A34;"> V</span><span style="color:#999999;">])</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Delete</span><span style="color:#999999;">(</span><span style="color:#393A34;">key K</span><span style="color:#999999;">)</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">bool</span></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span><span style="color:#393A34;">l </span><span style="color:#AB5959;">*</span><span style="color:#393A34;">LRUCache</span><span style="color:#999999;">[</span><span style="color:#393A34;">K</span><span style="color:#999999;">,</span><span style="color:#393A34;"> V</span><span style="color:#999999;">])</span><span style="color:#393A34;"> </span><span style="color:#59873A;">Len</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span></span></code></pre></div><p><b>示例:<span class="run-container"><a href="https://go.dev/play/p/-EZjgOURufP" target="_blank" rel="noreferrer">运行</a></span></b></p><div class="language-go vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">go</span><pre class="shiki dracula-soft vp-code-dark"><code><span class="line"><span style="color:#F286C4;">package</span><span style="color:#F6F6F4;"> main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">import</span><span style="color:#F6F6F4;"> (</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">fmt</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#DEE492;">"</span><span style="color:#E7EE98;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#DEE492;">"</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F286C4;">func</span><span style="color:#F6F6F4;"> </span><span style="color:#62E884;">main</span><span style="color:#F6F6F4;">() {</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> cache </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> algorithm.NewLRUCache[</span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">, </span><span style="color:#97E1F1;font-style:italic;">int</span><span style="color:#F6F6F4;">](</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> cache.</span><span style="color:#97E1F1;">Put</span><span style="color:#F6F6F4;">(</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> cache.</span><span style="color:#97E1F1;">Put</span><span style="color:#F6F6F4;">(</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">, </span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result1, ok1 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> cache.</span><span style="color:#97E1F1;">Get</span><span style="color:#F6F6F4;">(</span><span style="color:#BF9EEE;">1</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result2, ok2 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> cache.</span><span style="color:#97E1F1;">Get</span><span style="color:#F6F6F4;">(</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> result3, ok3 </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> cache.</span><span style="color:#97E1F1;">Get</span><span style="color:#F6F6F4;">(</span><span style="color:#BF9EEE;">3</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result1, ok1)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result2, ok2)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(result3, ok3)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(cache.</span><span style="color:#97E1F1;">Len</span><span style="color:#F6F6F4;">())</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> ok </span><span style="color:#F286C4;">:=</span><span style="color:#F6F6F4;"> cache.</span><span style="color:#97E1F1;">Delete</span><span style="color:#F6F6F4;">(</span><span style="color:#BF9EEE;">2</span><span style="color:#F6F6F4;">)</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> fmt.</span><span style="color:#97E1F1;">Println</span><span style="color:#F6F6F4;">(ok)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// Output:</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 1 true</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 2 true</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 0 false</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// 2</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;"> </span><span style="color:#7B7F8B;">// true</span></span>
|
||
<span class="line"><span style="color:#F6F6F4;">}</span></span></code></pre><pre class="shiki vitesse-light vp-code-light"><code><span class="line"><span style="color:#1E754F;">package</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">import</span><span style="color:#393A34;"> </span><span style="color:#999999;">(</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">fmt</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B5695999;">"</span><span style="color:#59873A;">github.com/duke-git/lancet/v2/algorithm</span><span style="color:#B5695999;">"</span></span>
|
||
<span class="line"><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#1E754F;">func</span><span style="color:#393A34;"> </span><span style="color:#59873A;">main</span><span style="color:#999999;">()</span><span style="color:#393A34;"> </span><span style="color:#999999;">{</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">cache</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> algorithm</span><span style="color:#999999;">.</span><span style="color:#393A34;">NewLRUCache</span><span style="color:#999999;">[</span><span style="color:#AB5959;">int</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#AB5959;">int</span><span style="color:#999999;">](</span><span style="color:#2F798A;">2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Put</span><span style="color:#999999;">(</span><span style="color:#2F798A;">1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">1</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Put</span><span style="color:#999999;">(</span><span style="color:#2F798A;">2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#2F798A;">2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">ok1</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Get</span><span style="color:#999999;">(</span><span style="color:#2F798A;">1</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">ok2</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Get</span><span style="color:#999999;">(</span><span style="color:#2F798A;">2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">result3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> </span><span style="color:#B07D48;">ok3</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Get</span><span style="color:#999999;">(</span><span style="color:#2F798A;">3</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result1</span><span style="color:#999999;">,</span><span style="color:#393A34;"> ok1</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result2</span><span style="color:#999999;">,</span><span style="color:#393A34;"> ok2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">result3</span><span style="color:#999999;">,</span><span style="color:#393A34;"> ok3</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Len</span><span style="color:#999999;">())</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#B07D48;">ok</span><span style="color:#393A34;"> </span><span style="color:#999999;">:=</span><span style="color:#393A34;"> cache</span><span style="color:#999999;">.</span><span style="color:#998418;">Delete</span><span style="color:#999999;">(</span><span style="color:#2F798A;">2</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"><span style="color:#393A34;"> fmt</span><span style="color:#999999;">.</span><span style="color:#998418;">Println</span><span style="color:#999999;">(</span><span style="color:#393A34;">ok</span><span style="color:#999999;">)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// Output:</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 1 true</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 2 true</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 0 false</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// 2</span></span>
|
||
<span class="line"><span style="color:#393A34;"> </span><span style="color:#A0ADA0;">// true</span></span>
|
||
<span class="line"><span style="color:#999999;">}</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-a3c25e27 data-v-5774f702><!--[--><!--]--><!----><nav class="prev-next" data-v-5774f702><div class="pager" data-v-5774f702><a class="pager-link prev" href="/api/overview.html" data-v-5774f702><span class="desc" data-v-5774f702>上一页</span><span class="title" data-v-5774f702>API概述</span></a></div><div class="pager" data-v-5774f702><a class="pager-link next" href="/api/packages/compare.html" data-v-5774f702><span class="desc" data-v-5774f702>下一页</span><span class="title" data-v-5774f702>比较器</span></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-324e8308 data-v-e4279f1c><div class="container" data-v-e4279f1c><p class="message" data-v-e4279f1c>Released under the MIT License.</p><p class="copyright" data-v-e4279f1c>Copyright © 2023-present Duke Du</p></div></footer><!--[--><!--]--></div></div>
|
||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_overview.md\":\"96e2136b\",\"api_packages_condition.md\":\"90f47acf\",\"api_packages_datastructure_hashmap.md\":\"310e4711\",\"api_packages_compare.md\":\"760bd561\",\"api_packages_concurrency.md\":\"9389375d\",\"api_packages_datastructure_copyonwritelist.md\":\"1a351580\",\"api_packages_datastructure_heap.md\":\"749f37d9\",\"api_packages_algorithm.md\":\"ed237cde\",\"api_packages_datastructure_stack.md\":\"9d7b51a7\",\"api_packages_convertor.md\":\"e0b3721b\",\"api_packages_datastructure_link.md\":\"53b556c9\",\"api_packages_datastructure_set.md\":\"8bd77304\",\"api_packages_datastructure_tree.md\":\"1eeacf87\",\"api_packages_cryptor.md\":\"f22a0bb6\",\"api_packages_datastructure_list.md\":\"c39c7138\",\"api_packages_datastructure_queue.md\":\"55dce1c4\",\"api_packages_formatter.md\":\"201fd6c7\",\"api_packages_function.md\":\"4e2d9bbf\",\"api_packages_fileutil.md\":\"b51c7094\",\"api_packages_datetime.md\":\"0b6cbfba\",\"api_packages_pointer.md\":\"31f3377b\",\"api_packages_random.md\":\"944282ca\",\"api_packages_retry.md\":\"2ab7989f\",\"api_packages_mathutil.md\":\"b8e8c6eb\",\"api_packages_maputil.md\":\"3068e5df\",\"api_packages_netutil.md\":\"94dcf91c\",\"en_api_overview.md\":\"1eb70105\",\"en_api_packages_condition.md\":\"628747ed\",\"en_api_packages_compare.md\":\"d9f47e5f\",\"en_api_packages_concurrency.md\":\"8d56fe20\",\"en_api_packages_algorithm.md\":\"425fbe92\",\"en_api_packages_convertor.md\":\"405cdf1f\",\"en_api_packages_datastructure_hashmap.md\":\"55db8537\",\"en_api_packages_datastructure_copyonwritelist.md\":\"c4ab8b5a\",\"en_api_packages_datastructure_heap.md\":\"638dd5d1\",\"api_packages_slice.md\":\"0d6c2ec5\",\"en_api_packages_cryptor.md\":\"1635ce0e\",\"en_api_packages_datastructure_link.md\":\"062572a5\",\"en_api_packages_datastructure_list.md\":\"d467285d\",\"en_api_packages_datastructure_set.md\":\"963fc914\",\"en_api_packages_datastructure_stack.md\":\"1998c8dc\",\"en_api_packages_datastructure_queue.md\":\"88ad36da\",\"en_api_packages_datastructure_tree.md\":\"e0a47a13\",\"en_api_packages_formatter.md\":\"6dfb5def\",\"en_api_packages_function.md\":\"fb93628a\",\"en_api_packages_fileutil.md\":\"a6db757b\",\"en_api_packages_datetime.md\":\"64150a3f\",\"en_api_packages_mathutil.md\":\"3df32af7\",\"en_api_packages_pointer.md\":\"16cc9085\",\"en_api_packages_random.md\":\"ad44c6d5\",\"en_api_packages_retry.md\":\"435b0bc9\",\"en_api_packages_maputil.md\":\"33abea45\",\"en_api_packages_netutil.md\":\"3d6a27e7\",\"index.md\":\"b0f036c9\",\"en_guide_introduction.md\":\"d2712e12\",\"guide_introduction.md\":\"78f35ff0\",\"en_guide_getting_started.md\":\"fbd5d30c\",\"en_index.md\":\"3bc9892c\",\"guide_getting_started.md\":\"acfc7802\",\"en_api_packages_slice.md\":\"c0e4e01a\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Lancet\",\"description\":\"A VitePress site\",\"base\":\"/\",\"head\":[],\"appearance\":\"dark\",\"themeConfig\":{\"logo\":{\"src\":\"/lancet_logo_mini.png\",\"width\":24,\"height\":24},\"outline\":[2,3],\"search\":{\"provider\":\"local\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/duke-git/lancet\"}],\"footer\":{\"copyright\":\"Copyright © 2023-present Duke Du\",\"message\":\"Released under the MIT License.\"}},\"locales\":{\"root\":{\"label\":\"简体中文\",\"lang\":\"zh-CN\",\"link\":\"/\",\"description\":\"一个强大的Go语言工具函数库\",\"head\":[[\"meta\",{\"property\":\"og:url\",\"content\":\"https://lancet.dev\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"一个强大的Go语言工具函数库\"}],[\"meta\",{\"property\":\"twitter:url\",\"content\":\"https://lancet.dev\"}],[\"meta\",{\"property\":\"twitter:title\",\"content\":\"Lancet\"}],[\"meta\",{\"property\":\"twitter:description\",\"content\":\"一个强大的Go语言工具函数库\"}]],\"themeConfig\":{\"outline\":{\"label\":\"本页内容\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\",\"activeMatch\":\"^/\"},{\"text\":\"指南\",\"link\":\"/guide/introduction\",\"activeMatch\":\"^/guide/\"},{\"text\":\"API\",\"link\":\"/api/overview\",\"activeMatch\":\"^/api/\"},{\"text\":\"相关链接\",\"items\":[{\"text\":\"更新日志\",\"link\":\"https://github.com/duke-git/lancet/releases\"}]}],\"sidebar\":{\"/\":[{\"text\":\"介绍\",\"collapsed\":true,\"items\":[{\"text\":\"Lancet是什么?\",\"link\":\"/guide/introduction\"},{\"text\":\"开始\",\"link\":\"/guide/getting_started\"}]}],\"/api/\":[{\"text\":\"概览\",\"items\":[{\"text\":\"API概述\",\"link\":\"/api/overview\"}]},{\"text\":\"API文档\",\"collapsed\":false,\"items\":[{\"text\":\"算法\",\"link\":\"/api/packages/algorithm\"},{\"text\":\"比较器\",\"link\":\"/api/packages/compare\"},{\"text\":\"并发处理\",\"link\":\"/api/packages/concurrency\"},{\"text\":\"条件判断\",\"link\":\"/api/packages/condition\"},{\"text\":\"类型转换\",\"link\":\"/api/packages/convertor\"},{\"text\":\"加密&解密\",\"link\":\"/api/packages/cryptor\"},{\"text\":\"数据结构\",\"collapsed\":true,\"items\":[{\"text\":\"线性表\",\"link\":\"/api/packages/datastructure/list\"},{\"text\":\"线性表(线程安全)\",\"link\":\"/api/packages/datastructure/copyonwritelist\"},{\"text\":\"链表\",\"link\":\"/api/packages/datastructure/link\"},{\"text\":\"栈\",\"link\":\"/api/packages/datastructure/stack\"},{\"text\":\"队列\",\"link\":\"/api/packages/datastructure/queue\"},{\"text\":\"堆\",\"link\":\"/api/packages/datastructure/heap\"},{\"text\":\"树\",\"link\":\"/api/packages/datastructure/tree\"},{\"text\":\"集合\",\"link\":\"/api/packages/datastructure/set\"},{\"text\":\"HashMap\",\"link\":\"/api/packages/datastructure/hashmap\"}]},{\"text\":\"日期&时间\",\"link\":\"/api/packages/datetime\"},{\"text\":\"文件\",\"link\":\"/api/packages/fileutil\"},{\"text\":\"格式化工具\",\"link\":\"/api/packages/formatter\"},{\"text\":\"函数\",\"link\":\"/api/packages/function\"},{\"text\":\"数学工具\",\"link\":\"/api/packages/mathutil\"},{\"text\":\"Map\",\"link\":\"/api/packages/maputil\"},{\"text\":\"网络\",\"link\":\"/api/packages/netutil\"},{\"text\":\"指针\",\"link\":\"/api/packages/pointer\"},{\"text\":\"随机数\",\"link\":\"/api/packages/random\"},{\"text\":\"重试\",\"link\":\"/api/packages/retry\"},{\"text\":\"切片\",\"link\":\"/api/packages/slice\"}]}]}}},\"en\":{\"label\":\"English\",\"lang\":\"en-US\",\"link\":\"/en/\",\"description\":\"A powerful util function library of Go\",\"head\":[[\"meta\",{\"property\":\"og:url\",\"content\":\"https://golancet.dev\"}],[\"meta\",{\"property\":\"og:description\",\"content\":\"A powerful util function library of Go\"}],[\"meta\",{\"property\":\"twitter:url\",\"content\":\"https://golancet.dev\"}],[\"meta\",{\"property\":\"twitter:title\",\"content\":\"Lancet\"}],[\"meta\",{\"property\":\"twitter:description\",\"content\":\"A powerful util function library of Go\"}]],\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/en/\",\"activeMatch\":\"^/en/\"},{\"text\":\"Guide\",\"link\":\"/en/guide/introduction\",\"activeMatch\":\"^/en/guide/\"},{\"text\":\"API\",\"link\":\"/en/api/overview\",\"activeMatch\":\"^/en/api/\"},{\"text\":\"Links\",\"items\":[{\"text\":\"Releaselog\",\"link\":\"https://github.com/duke-git/lancet/releases\"}]}],\"sidebar\":{\"/en/\":[{\"text\":\"Introduction\",\"collapsed\":false,\"items\":[{\"text\":\"What is Lancet?\",\"link\":\"/en/guide/introduction\"},{\"text\":\"getting started\",\"link\":\"/en/guide/getting_started\"}]}],\"/en/api/\":[{\"text\":\"overview\",\"items\":[{\"text\":\"overview of API\",\"link\":\"/en/api/overview\"}]},{\"text\":\"packages\",\"collapsed\":false,\"items\":[{\"text\":\"algorithm\",\"link\":\"/en/api/packages/algorithm\"},{\"text\":\"compare\",\"link\":\"/en/api/packages/compare\"},{\"text\":\"concurrency\",\"link\":\"/en/api/packages/concurrency\"},{\"text\":\"condition\",\"link\":\"/en/api/packages/condition\"},{\"text\":\"convertor\",\"link\":\"/en/api/packages/convertor\"},{\"text\":\"cryptor\",\"link\":\"/en/api/packages/cryptor\"},{\"text\":\"datastructure\",\"collapsed\":true,\"items\":[{\"text\":\"list\",\"link\":\"/en/api/packages/datastructure/list\"},{\"text\":\"safelist\",\"link\":\"/en/api/packages/datastructure/copyonwritelist\"},{\"text\":\"link\",\"link\":\"/en/api/packages/datastructure/link\"},{\"text\":\"stack\",\"link\":\"/en/api/packages/datastructure/stack\"},{\"text\":\"queue\",\"link\":\"/en/api/packages/datastructure/queue\"},{\"text\":\"heap\",\"link\":\"/en/api/packages/datastructure/heap\"},{\"text\":\"tree\",\"link\":\"/en/api/packages/datastructure/tree\"},{\"text\":\"set\",\"link\":\"/en/api/packages/datastructure/set\"},{\"text\":\"hashmap\",\"link\":\"/en/api/packages/datastructure/hashmap\"}]},{\"text\":\"datetime\",\"link\":\"/en/api/packages/datetime\"},{\"text\":\"fileutil\",\"link\":\"/en/api/packages/fileutil\"},{\"text\":\"formatter\",\"link\":\"/en/api/packages/formatter\"},{\"text\":\"function\",\"link\":\"/en/api/packages/function\"},{\"text\":\"mathutil\",\"link\":\"/en/api/packages/mathutil\"},{\"text\":\"maputil\",\"link\":\"/en/api/packages/maputil\"},{\"text\":\"netutil\",\"link\":\"/en/api/packages/netutil\"},{\"text\":\"pointer\",\"link\":\"/en/api/packages/pointer\"},{\"text\":\"random\",\"link\":\"/en/api/packages/random\"},{\"text\":\"retry\",\"link\":\"/en/api/packages/retry\"},{\"text\":\"slice\",\"link\":\"/en/api/packages/slice\"}]}]}}}},\"scrollOffset\":90,\"cleanUrls\":false}");</script>
|
||
|
||
</body>
|
||
</html> |