關於三種簡單排序的想法

2021-07-23 10:36:16 字數 1448 閱讀 3317

之前關於排序之類的東西總是看過就忘,這次索性來個小總結,親自動手寫一遍**,眼過千遍不如手過一遍。這次就先寫三種簡單的排序:氣泡排序,插入排序和選擇排序,均選擇由小到大排序。

一:氣泡排序(bubble sort)

在氣泡排序中,最重要的思想是:兩兩比較,將兩者較少的公升上去。每次公升到 i 位置的都是帶排序陣列中最小的數。

這樣理解:(從小到大排序)存在10個不同大小的氣泡,由底至上地把較少的氣泡逐步地向上公升,這樣經過遍歷一次後,最小的氣泡就會被上公升到頂(下標為0),然後再從底至上地這樣公升,迴圈直至十個氣泡大小有序。

內迴圈是未排序陣列。

氣泡排序最壞情況的時間複雜度是o(n²)

設陣列為nums[0…n-1]。

初始時,i = 0,j = nums.length - 1

兩兩比較nums[ j - 1 ] 和 nums[ j ],若前者大於後者,後者上移,否則相對位置不動

每次未排序陣列都會走一遍。

i++並重複第二步直到i==n-1。排序完成。

測試**如下

public

static

void

bubblesort(int nums)}}

}

注:若 j 從後往前則是將最小的冒泡到最前合適,若是從前往後則是將最大的冒泡到最後合適。

二:插入排序(insertion sort)

直接插入排序的基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。

其內迴圈是已排序陣列。

設陣列為a[0…n-1]。

初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

合併方式為先儲存待排序數,比較a[j] 位置與其大小,若大於temp則後移,直至 j < 0或者不大於,把帶排序數插入即可。

i++並重複第二步直到i==n-1。排序完成。

測試**如下

public

static

void

insertsort(int nums)

nums[j + 1] = temp;

}}

三.選擇排序(selection sort)

氣泡排序的思想為:每一次排序過程,通過相鄰元素的交換,將當前沒有排好序中的最小移到陣列的最左端。而選擇排序的思想也很直觀:每一次排序過程,我們獲取當前沒有排好序中的最小的元素和陣列最左端的元素交換,迴圈這個過程即可實現對整個陣列排序。氣泡排序在發現比它小的時候就交換,而選擇排序是只有在確定了最小的資料之後,才會發生交換。

public static void selectionsort(int nums)

if(min != i)}}

}

三種簡單排序

1.氣泡排序 氣泡排序是一種簡單的排序演算法,其基本思想如下 1 從第乙個開始起,比較相鄰的兩個元素的大小,如果前乙個比後乙個大,則進行交換 也就是小的冒上去 2 然後再和之前相鄰元素進行比較,若小,則冒上去。2 重複以上操作,直到最後乙個元素。1 public static void bubble...

三種簡單排序演算法

一 氣泡排序 外層迴圈out,從n 1逐漸減小,內層迴圈in,從0逐漸增加到out,進行比較swap。package com.xwiam.algorithms.sort public class bubblesort public void insert long value public int ...

三種簡單排序分析

一 氣泡排序 氣泡排序的原理就是按順序取出數列中相鄰的兩個數,依次比較,互換位置,最終完成排序的目的。時間複雜度 如果序列的初始狀態為 正序 則氣泡排序只需要進行一次排序,在排序的過程中只需要進行n 1次比較,且不移動記錄 反之,如果序列的初始狀態為 逆序 則需要進行n n 1 2次比較和記錄移動。...