常見排序演算法 O N

2021-09-05 10:18:39 字數 1037 閱讀 7839

github已上傳相關原始碼

比較兩個相鄰的元素,將值大的元素交換至右端。第一趟排序後,最後乙個元素就是最大的,然後再次遍歷[0,n-1],這一趟排序倒數第二位就是剩下的元素李最大的,重複遍歷,直到剩下乙個元素時,就獲得排序好的陣列。**如下:

/**

* @param arr 待排序陣列

* @param n 陣列長度

*/public void bubblesort(int arr,int n)}}

}

對陣列排序時,實際上是遍歷陣列,將最小的那一位與索引為0的位置的元素交換,然後在剩下的元素中繼續選擇最小的元素與索引位置為1的位置交換,如此重複遍歷,直到交換完所有元素。**如下:

/**

* @param arr 待排序陣列

* @param n 陣列長度

*/public static void selectionsort(int arr, int n)

}sorthelper.swap(arr, i, minindex);

}}

在對陣列排序時,將陣列分成兩部分,前半部分有序,後半部分無序,遍歷陣列,將無序不分每個元素插入到有序不分合適的位置。**如下:

public void insertionsort(int arr , int n)else }}

}

相比於選擇排序,可以發現插入排序內層的for迴圈是可以提前結束的,相比於選擇排序效能會有提公升(也就是如果是基本有序的陣列,插入排序效率更高)。考慮到比較和交換過程中的多次賦值操作也是需要消耗效能的,還可以做如下改進:

//公升級版

public static void insertionsortv2(int arr , int n)else

arr[j] = e;}}

}

因為不再是進行元素的交換,比起來減少了賦值操作,會節約一點效能。因為能夠提前終止第二層迴圈,在陣列有序的情況下甚至可能比o(nlogn)級別的排序演算法還要快。

常見排序演算法

一.選擇排序 1.概念 每次從無序的子陣列裡面選擇最小的數,放在有序區的後面 既與無序區的首元素交換 不穩定排序 時間複雜度o n 2 輔助儲存o 1 2.實現 int selection sort int a,int len len為陣列元素個數 二.氣泡排序 1.概念 重複訪問數列n 1次,每次...

常見排序演算法

1 插入排序 直接插入排序,是一種最簡單的排序方法,它的基本操作是將乙個記錄插入到已排好序的有序表中,從而得到乙個新的 記錄數增1的有序表。初始 38 65 27 76 13 i 1 13 選13為監視哨並假設為乙個有序序列 i 2 13 38 待插入元素38 13 i 3 13 38 65 待插入...

常見排序演算法

排序演算法作為常用的基本演算法,今天就來總結一下各種經典排序演算法,這裡只貼出 對演算法的文字描述可以在課本或其它部落格上找到很多詳盡的敘述,這裡直接上 而不是常見演算法書上的偽 希望對正在努力學資料結構與演算法的朋友們有幫助 1 氣泡排序 void bubblesort t a,int n if ...