網站首頁 編程語言 正文
在選擇排序中,從第一個元素開始,依次遍歷數(shù)組中的元素,找出當前遍歷元素之后的最小元素,與當前遍歷元素交換位置,依此類推,是一種由前往后的排序。而在插入排序中,從第二個元素開始,依次遍歷數(shù)組中的元素,把當前遍歷元素與之前的元素進行比較,并插入到之前的某個位置,是一種由后往前的排序。
自定義一個類,里面維護著一個int[]類型數(shù)組,通過構造函數(shù)定義數(shù)組長度并初始化,并提供了打印和插入排序的相關方法。
public class MyArray
{
private static int[] arr;
private static Random r = new Random();
public MyArray(int size)
{
arr = new int[size];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = r.Next(10, 100);
}
}
//插入排序
public void Sort()
{
int insert;
for (int i = 1; i < arr.Length; i++) //從第二個元素開始遍歷
{
insert = arr[i];//把當前遍歷元素視為插入元素,放到臨時變量insert中
int moveItem = i;//movieItem可以理解為一個動態(tài)索引,初始位置在當前遍歷元素的索引
while (moveItem > 0 && arr[moveItem -1] > insert) //如果前面一個元素比插入元素大
{
arr[moveItem] = arr[moveItem - 1];//那就把前面這個元素賦值給后面位置,相當于往后移一位
moveItem--;//再把動態(tài)索引位置向前移動一位
}
arr[moveItem] = insert;
Print();
}
}
//打印數(shù)組元素
public void Print()
{
foreach (var item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
}
以上,大致過程是:從數(shù)組中第二個元素開始,先把當前遍歷元素賦值給一個臨時變量,比如說是insert,insert這個變量肯定要插入到當前遍歷元素之前的某個位置,如何確定插入位置呢?假設用moveItem變量表示最終要插入的索引位置,先把當前遍歷元素的索引賦值給moveItem,如果moveItem-1位置上的元素大于insert,那就把moveItem-1位置上的元素向后移動一位,并把moveItem-1位置的索引賦值給moveItem,insert是要插入到當前的這個moveItem位置嗎?不一定。再繼續(xù)拿當前moveItem位置的前面一個位置上的元素與insert比較,只要是比insert大,就把該位置上的元素向后移動一位,并重新設置moveItem的值,直到停止循環(huán)。此時moveItem的值就是insert需要插入的位置。
客戶端調用。
class Program
{
static void Main(string[] args)
{
MyArray myArray = new MyArray(8);
Console.WriteLine("排序前:");
myArray.Print();
Console.WriteLine("排序后:");
myArray.Sort();
Console.ReadKey();
}
}
對于插入排序,當依次遍歷數(shù)組元素時,進行了n-1次迭代,當把第二個元素插入到之前某個位置時進行了1次迭代,當把第三個元素插入到之前某個位置時進行了2次迭代......第n個元素進行了n-1次迭代,以時間復雜度來說,忽略小項和常數(shù)項,插入排序基本上是一個平方階,寫成O(n2)。?
原文鏈接:https://www.cnblogs.com/darrenji/p/3875070.html
相關推薦
- 2022-10-26 C#實現(xiàn)文件與字符串互轉的方法詳解_C#教程
- 2023-10-09 git stash
- 2022-05-16 Python中input()函數(shù)的用法實例小結_python
- 2022-12-05 服務啟動項Start類型詳解_其它
- 2022-04-02 利用Pygame繪制圓環(huán)的示例代碼_python
- 2022-07-20 nginx?添加http_stub_status_module模塊_nginx
- 2022-02-15 獲取字符串大括號里面的值 ,并判斷字符串是否符合要求
- 2022-12-21 Input系統(tǒng)之InputReader處理按鍵事件詳解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支