排序和排列——藍橋杯備考

1.十大排序算法

本次用下面的例題詳解這十種排序算法

題目描述

將讀入的?N?個數從小到大排序后輸出。

輸入格式

第一行為一個正整數?N。

第二行包含?N?個空格隔開的正整數?ai?,為你需要進行排序的數。

輸出格式

將給定的?N?個數從小到大輸出,數之間空格隔開,行末換行且無空格。

輸入輸出樣例

輸入

5
4 2 4 5 1

輸出?

1 2 4 4 5

說明/提示

對于?20%?的數據,有?1≤N≤103;

對于?100%?的數據,有?1≤N≤105,1≤ai?≤109。

1.選擇排序

效率極低,有O(n2),但優點在于實現簡單,邏輯符合日常思維

#include<iostream>
using namespace std;
int main()
{int n;long long int t = 0;cin >> n;long long int a[10000];for (int i = 0; i < n; i++){cin >> a[i];}int min = 0;for (int i = 0; i < n; i++){min = i;//重置最小值坐標for (int j = i; j < n; j++){if (a[j] < a[min]){min = j;}}t = a[min];a[min] = a[i];a[i] = t;}for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;
}

2.冒泡排序

冒泡排序在最壞的情況下時間復雜度也是O(n2),但如果是在原數列有序的情況下,能夠減少時間復雜度

#include<iostream>
#include<algorithm>
using namespace std;
int a[100005],n;
void selection_sort()
{for (int i = 0; i < n-1; i++){bool swaped = true;for (int j = 0; j < n-i-1; j++){if (a[j] > a[j + 1]){swap(a[j], a[j + 1]);swaped = false;}}if (swaped){break;}}
}
int main()
{cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}selection_sort();for (int i = 0; i < n; i++){cout << a[i] <<" ";}cout << endl;
}

3.插入排序

和冒泡排序一樣依靠原數組部分有序來減少時間復雜度,最壞情況下還是O(n2)。

錯誤示例,意外寫成了冒泡排序,通過 swap頻繁交換元素,插入排序是不斷比較然后一次性插入

#include<iostream>
using namespace std;
int a[100005], n;
void insertion_sort()
{for (int i = 1; i < n; i++)//之所以初值是1,因為要和他的前一位比較,防止溢出{int key = a[i];int j = i - 1;while (j >= 0 && key < a[j]){swap(a[j+1], a[j]);j--;}}
}
int main()
{cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}insertion_sort();for (int i = 0; i < n; i++){cout<< a[i]<<" ";}cout << endl;
}

正確做法

#include<iostream>
using namespace std;
int a[100005], n;
void insertion_sort()
{for (int i = 1; i < n; i++)//之所以初值是1,因為要和他的前一位比較,防止溢出{int key = a[i];int j = i - 1;while (j >= 0 && key < a[j]){a[j + 1] = a[j];j--;}a[j + 1] = key;}
}
int main()
{cin >> n;for (int i = 0; i < n; i++){cin >> a[i];}insertion_sort();for (int i = 0; i < n; i++){cout<< a[i]<<" ";}cout << endl;
}

4.希爾排序

希爾排序是插入排序的改良版,既然插入排序依賴原數組的原本就有序的狀態來減少時間復雜度,那么可以用”猜“的方式來減少最糟的無序狀態

例如這個圖中,假如索引為0和2的狀態無序,在普通的插入排序下就需要比較兩次,插入一次。如果直接交換的話會節省后續很多時間復雜度。之所以不直接去猜第一位和最后一位,是因為雖然這樣一個的空間跨度大,但是這是犧牲其他組別的空間跨度來實現的,所以都差不多了,反而風險更高。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82120.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# 高效讀取大文件

在 C# 中高效讀取大文件時&#xff0c;需根據文件類型和場景選擇不同的技術方案&#xff0c;以下為綜合實踐方法及注意事項&#xff1a; 一、文本文件讀取方案 逐行讀取 StreamReader.ReadLine?&#xff1a;通過流式處理逐行加載文本&#xff0c;避免一次性加載整個文件到內…

深度學習模型可視化:Netron的安裝和使用

文章目錄 Netron簡介Netron加載模型類型Netron使用方式Netron功能介紹完整案例總結 Netron簡介 Netron是一個支持PyTorch的可視化工具&#xff0c;它的開發者是微軟的Lutz Roeder&#xff0c;操作簡單快捷&#xff0c;就像保存文件、打開文件一樣&#xff0c;簡單高效。Netron…

pytorch LSTM 結構詳解

最近項目用到了LSTM &#xff0c;但是對LSTM 的輸入輸出不是很理解&#xff0c;對此&#xff0c;我詳細查找了lstm 的資料 import torch.nn as nnclass LSTMModel(nn.Module):def __init__(self, input_size1, hidden_size50, num_layers2):super(LSTMModel, self).__init__()…

AUTOSAR AP 入門0:AUTOSAR_EXP_PlatformDesign.pdf

AUTOSAR AP官網&#xff1a;AUTOSAR Adaptive Platform設計AUTOSAR AP的目的&#xff0c;翻譯版官方文檔 AUTOSAR_EXP_PlatformDesign.pdf &#xff1a; https://mp.weixin.qq.com/s?__bizMzg2MzAyMDIzMQ&mid2247553050&idx2&sn786c3a1f153acf99b723bf4c9832acaf …

零碳辦會新范式!第十屆國際貿易發展論壇——生物能源和可持續發展專場,在京舉辦

2025年5月16日&#xff0c;第十屆國際貿易發展論壇在北京國際飯店盛大啟幕。本屆論壇由北京綠林認證有限公司主辦。作為匯聚行業智慧、引領發展方向的盛會&#xff0c;國際貿易發展論壇每兩年一屆&#xff0c;本次會議是第十屆&#xff0c;至今已走過近20年光輝歷程。多年來&am…

ECharts圖表工廠,完整代碼+思路邏輯

Echart工廠支持柱狀圖&#xff08;bar&#xff09;折線圖&#xff08;line&#xff09;散點圖&#xff08;scatter&#xff09;餅圖&#xff08;pie&#xff09;雷達圖&#xff08;radar&#xff09;極坐標柱狀圖&#xff08;polarBar&#xff09;和極坐標折線圖&#xff08;po…

如何制作令人印象深刻的UI設計?

1. 規劃用戶旅程 規劃用戶旅程是創建高效且吸引人的UI設計的第一步。設計師需要深入了解目標用戶群體的需求和行為模式&#xff0c;這通常涉及用戶調研、創建用戶角色&#xff08;Personas&#xff09;和繪制用戶旅程圖&#xff08;User Journey Maps&#xff09;。通過這種方…

k8s 離線安裝 kube-prometheus-stack

配置共享存儲 Prometheus 需要配置持久化存儲&#xff0c;防止數據丟失 服務端 服務端安裝 NFS 服務 sudo apt install nfs-kernel-server 創建共享目錄&#xff0c;在服務器端創建 /nfs 目錄。 mkdir /nfs chmod -R 777 /nfs # 設置文件權限 nfs目錄下只給了默認權限&#xff…

ceph osd 磁盤分區對齊

分區對齊可以提高讀寫速度的原理是什么 分區對齊可以提高磁盤讀寫速度的原理主要在于 磁盤的物理扇區大小與操作系統發起的讀寫請求之間是否對齊。如果不對齊,每次讀寫操作可能會跨越多個物理扇區,造成額外的 I/O 操作,從而降低性能。 ?? 原理詳解 1. 物理扇區(Physica…

Simon J.D. Prince《Understanding Deep Learning》

學習神經網絡和深度學習推薦這本書&#xff0c;這本書站位非常高&#xff0c;且很多問題都深入剖析了&#xff0c;甩其他同類書籍幾條街。 多數書&#xff0c;不深度分析、沒有知識體系&#xff0c;知識點零散、章節之間孤立。還有一些人Tian所謂的權威&#xff0c;醒醒吧。 …

【泛微系統】后端開發Action常用方法

后端開發Action常用方法 代碼實例經驗分享:代碼實例 經驗分享: 本文分享了后端開發中處理工作流Action的常用方法,主要包含以下內容:1) 獲取工作流基礎信息,如流程ID、節點ID、表單ID等;2) 操作請求信息,包括請求緊急程度、操作類型、用戶信息等;3) 表單數據處理,展示…

SSH的screen方法

創建一個screen窗口&#xff0c;&#xff08;在需要運行程序的文件夾內&#xff09;使用 screen -S name 命令&#xff0c;其中 name 是窗口的名字。 在窗口中執行需要的命令。 當需要臨時離開時&#xff0c;使用快捷鍵 ctrlA D 回來時&#xff0c;使用 screen -r name 恢復…

無法訪問org.springframework.boot.SpringApplication

無法訪問org.springframework.boot.SpringApplication 檢查springboot和jdk的版本是否適配檢查jdk的設置是否統一 主要檢查下面幾處地方

洛谷 P1800 software(DP+二分)【提高+/省選?】

題目鏈接 https://www.luogu.com.cn/problem/P1800 思路 對于大于等于最優解的天數&#xff0c;一定能使公司交付軟件。對于小于最優解的天數&#xff0c;一定無法使公司交付軟件。所以考慮二分答案 x x x。 定義 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i個人做了 j j j…

C++性能測試工具——sysprof的使用

一、sysprof sysprof相對于前面的一些性能測試工具來說&#xff0c;要簡單不少。特別是其圖形界面的操作&#xff0c;非常容易上手&#xff0c;它還支持分析文件的保存和導入功能&#xff0c;這是一個非常不錯的功能。做為一款系統性能測試工具&#xff0c;它支持多種硬件平臺…

redis數據持久化和配置-15(備份和還原 Redis 數據)

備份和還原 Redis 數據 備份和恢復數據是管理任何數據庫系統&#xff08;包括 Redis&#xff09;的關鍵方面。數據丟失可能是由于硬件故障、軟件錯誤、意外刪除甚至惡意攻擊而發生的。因此&#xff0c;擁有強大的備份和恢復策略對于確保數據持久性和業務連續性至關重要。本課將…

【上位機——WPF】布局控件

布局控件 常用布局控件Panel基類Grid(網格)UniformGrid(均勻分布)StackPanel(堆積面板)WrapPanel(換行面板)DockerPanel(停靠面板)Canvas(畫布布局)Border(邊框)GridSplitter(分割窗口)常用布局控件 Grid:網格,根據自定義行和列來設置控件的布局StackPanel:棧式面板,包含的…

打卡Day33

簡單的神經網絡 數據的準備 # 仍然用4特征&#xff0c;3分類的鳶尾花數據集作為我們今天的數據集 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split import numpy as np# 加載鳶尾花數據集 iris load_iris() X iris.data # …

python開發環境管理和包管理

在 Python 開發中&#xff0c;環境管理 和 包管理 是兩個非常重要的概念。它們幫助開發者&#xff1a; 這里寫目錄標題 一、什么是 Python 環境管理&#xff1f;二、什么是 Python 包管理&#xff1f;三、常見文件說明&#xff08;用于包管理和環境配置&#xff09;四、典型流程…

Mybatis面向接口編程

添加與Mapper接口的映射 <!--UserMapper.xml--> <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> …