日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

冒泡排序的多种写法、逻辑

發布時間:2025/3/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 冒泡排序的多种写法、逻辑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡排序的多種寫法、邏輯

本文提供全流程,中文翻譯。

Chinar堅持將簡單的生活方式,帶給世人!

(擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例)



  • 1
    • Bubble Sort —— 上推分類法
  • 2
    • Bubble Sort —— 冒泡排序( - 根據下標)
  • 3
    • Bubble Sort —— 冒泡排序( - 根據輪數)
  • 4
    • Bubble Sort —— do while ( - 判定是否滿足有序)


1

Bubble Sort —— 上推分類法



本方法重點在于根據次第來完成運算

1 —— 把最小數移動到最后一位

2 —— 由于最后一位確定,所以在第二次運算時不用計算。所以第二次計算次數 減 1

3 —— 依次類推,就可用簡單的for循環來達到排序的目的

4 —— 具體由大到小,還是由小到大。根據自己的需要調節 ” > < ” 的比較方式,交換順序不需要變化。


數組中:a[0]與a[1] 位置交換的方式,不使用中間變量的情況下 ↓

a[j] = a[j] + a[j + 1]; //a[0]=10+120 a[j + 1] = a[j] - a[j + 1]; //a[1]=130-120 —— (10)a[j] = a[j] - a[j + 1]; //a[0]=130-10 —— (120)

using System;namespace TestMaoPao {/// <summary>/// 測試腳本 —— 冒泡排序/// </summary>class BubbleSort{/// <summary>/// 主入口/// </summary>/// <param name="args"></param>static void Main(string[] args){int[] list = { 10, 8, 3, 5, 6, 7, 9, 0, 1, 2 };//聲明一個數組int count = 0;//記錄運算次數count = Sort(list);//Sort函數的返回值,賦值給countConsole.WriteLine(count);//輸出count,說明計算多少次Console.WriteLine("**********************");//這是一條區分線,僅為了醒目for (int i = 0; i < list.Length; i++)//遍歷輸出(整理后)數組{Console.WriteLine(list[i]);//根據下標,打印每個值}Console.ReadKey();//等待用戶輸入,任意鍵 (默認運行完,關閉控制臺)}/// <summary>/// 計算方式 —— 根據次第運算/// </summary>/// <param name="a"></param>/// <returns></returns>private static int Sort(int[] a){int count = 0;//記錄運算次數的變量for (int i = a.Length - 1; i > 0; i--)//控制次第比較的個數,首次為與9個數進行比較{for (int j = 0; j < i; j++)//{count++; //次數自增if (a[j] < a[j + 1])//第一數 < 第二個數{//這里使用了不加臨時變量,進行數值交換 (當然加個臨時變量也是一樣的)a[j] = a[j] + a[j + 1]; //a[0]=10+120 a[j + 1] = a[j] - a[j + 1]; //a[1]=130-120 —— (10)a[j] = a[j] - a[j + 1]; //a[0]=130-10 —— (120) //從而 a[0] 與 a[1] 交換位置//第一次 交換下來,最小值會在最后一個//由于最后一個值已經確定最小。所以外部循環次數減 1 ,第二次只需要比較8個數}}}return count;//Sort函數的返回值 —— 記錄運算次數}} }

最后輸出結果為:

45 (運算次數) ********************** 10 9 8 7 6 5 3 2 1 0

2

Bubble Sort —— 冒泡排序( - 根據下標)



本方法重點在于根據下標來完成運算

1 —— 把最小數移動到第一位

2 —— 由于第一位最小值確定,所以在第二次運算時不用計算。所以第二次計算時,從下標 list[1](也就是第二個數)開始做對比

3 —— 依次類推,就可用簡單的for循環來達到排序的目的

4 —— 具體由大到小,還是由小到大。根據自己的需要調節 ” > < ” 的比較方式,交換順序不需要變化。


數組中:a[0]與a[1] 位置交換的方式,使用中間變量的情況下 ↓

int tempNumber = a[j]; ; //tempNumber = 8a[j] = a[i]; //a[1]=10 a[i] = tempNumber; //a[0]=8

using System;namespace TestMaoPao {/// <summary>/// 測試腳本 —— 冒泡排序/// </summary>class BubbleSort{/// <summary>/// 主入口/// </summary>/// <param name="args"></param>static void Main(string[] args){int[] list = { 10, 8, 3, 5, 6, 7, 9, 0, 1, 2 };//聲明一個數組int count = 0;//記錄運算次數count = Sort(list);//Sort函數的返回值,賦值給countConsole.WriteLine(count);//輸出count,說明計算多少次Console.WriteLine("**********************");//這是一條區分線,僅為了醒目for (int i = 0; i < list.Length; i++)//遍歷輸出(整理后)數組{Console.WriteLine(list[i]);//根據下標,打印每個值}Console.ReadKey();//等待用戶輸入,任意鍵 (默認運行完,關閉控制臺)}/// <summary>/// 計算方式 —— 根據下標排序/// </summary>/// <param name="a"></param>/// <returns></returns>private static int Sort(int[] a){int count = 0;//記錄運算次數的變量for (int i = 0; i < a.Length; i++)//外部for循環:遍歷數組長度個數的下標,首次為0{for (int j = i + 1; j < a.Length; j++)//內部for循環:遍歷數組個數的下標,首次為1{count++;//次數自增if (a[j] < a[i]) //第二數 < 第一個數{//把第二個數的值賦值給臨時變量 int tempNumber = a[j]; ; //tempNumber = 8a[j] = a[i]; //a[1]=10 a[i] = tempNumber; //a[0]=8//從而 a[0] 與 a[1] 交換位置//第一次 交換下來,最小值會在第一個//由于第一個值已經確定最小。//所以外部循環第二次運行時是從第二個數( a[1] )開始的 //第二次內部循環是從 ( a[2] )只需要比較8個數}}}return count;//Sort函數的返回值 —— 記錄運算次數}} }

最后輸出結果為:

45 (運算次數) ********************** 0 1 2 3 5 6 7 8 9 10

3

Bubble Sort —— 冒泡排序( - 根據輪數)



本方法重點在于根據次第來完成運算

1 —— 把最小數移動到第一位

2 —— 由于第一位最小值確定,所以在第二次運算時不用計算。所以第二次計算時,從下標 list[1](也就是第二個數)開始做對比

3 —— 依次類推,就可用簡單的for循環來達到排序的目的

4 —— 具體由大到小,還是由小到大。根據自己的需要調節 ” > < ” 的比較方式,交換順序不需要變化。

最后輸出結果為:

45 (運算次數) ********************** 0 1 2 3 5 6 7 8 9 10

4

Bubble Sort —— do while ( - 判定是否滿足有序)



本方法重點在于:判定滿足依次排列,有序后跳出循環

數組中:a[0]與a[1] 位置交換的方式,不使用中間變量的情況下 ↓

a[j] = a[j] + a[j + 1]; //a[0]=10+120 a[j + 1] = a[j] - a[j + 1]; //a[1]=130-120 —— (10)a[j] = a[j] - a[j + 1]; //a[0]=130-10 —— (120)

using System;namespace TestMaoPao {/// <summary>/// 測試腳本 —— 冒泡排序/// </summary>class BubbleSort{/// <summary>/// 主入口/// </summary>/// <param name="args"></param>static void Main(string[] args){int[] ints = {5, 4, 3, 8, 9, 1, 7, 2, 0, 6, 10};Short(ints);foreach (var i in ints){Console.WriteLine(i);}Console.ReadLine();}/// <summary>/// 冒泡排序/// </summary>/// <param name="ints"></param>static void Short(int[] ints){int count = 0;bool isStop; //聲明布爾為 truedo{isStop = false; //此標志位,為結束循環for (int i = 0; i < ints.Length - 1; i++) //遍歷數組{if (ints[i] > ints[i + 1]){ints[i + 1] = ints[i] + ints[i + 1];ints[i] = ints[i + 1] - ints[i];ints[i + 1] = ints[i + 1] - ints[i];isStop = true; //標志位:falsecount++;}}} while (isStop);Console.WriteLine("循環次數: " + count);}} }

最后輸出結果為:

循環次數: 27 0 1 2 3 4 5 6 7 8 9 10

END

本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究

對于需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com

對于經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處并注明網址

轉載于:https://www.cnblogs.com/chinarbolg/p/9601478.html

總結

以上是生活随笔為你收集整理的冒泡排序的多种写法、逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。