1. 程式人生 > >簡單選擇排序,C語言實現

簡單選擇排序,C語言實現

簡單選擇排序和堆排序   都是內部排序中的選擇排序。

首先我們先介紹

選擇排序法的基本思想:我們想象一個炒股票的人,他只會在時機非常明確到來的時候才出手,也就是當排序的時候,找到合適的關鍵字再交換,並且只移動一次。

簡單選擇排序的基本思想:每一趟都是在(n-i+1),(i=1,2,3...n-1)個記錄中選取關鍵字最小的記錄作為有序序列的第i個記錄。

例如給出10個數字   9   1   3   2   5   4   8   6   7   0,要求按照從小到大排序

  (1)   :用一個變數i指向陣列的第一個位置也就是9,此時將0賦給變數min。(注意,此時i是0,只是他指向了陣列的第一個位置,但是a[i]=9)

  (2) :用一個變數j指向i後一個位置,也就是1(j同i一樣,僅僅是指向陣列的第二個位置,所以j得值為1,但是a[j]=1)

(3):然後1,與9比較,9大,所以把j的值(注意:j的值是陣列的位置)賦給min,j++

(4):然後j++重複步驟3,直到最後可以得到min=9,所以交換i和j的值然後i++,接著迴圈:0132548679

(5);迴圈上述步驟,可以的到最後的結果0123456789

程式碼如下:


時間複雜度分析:

無論什麼情況,比較的次數是一樣的((n-1)+(n-2)+...+1)=n*(n-1)/2

交換的次數,最好的情況下是0次,最壞是n-1次

所以,總的時間複雜度依然為O(n^2)

雖然總的時間複雜度和氣泡排序一樣,但是簡單選擇排序的效能還是要略好於氣泡排序

相關推薦

簡單選擇排序C語言實現

簡單選擇排序和堆排序   都是內部排序中的選擇排序。首先我們先介紹選擇排序法的基本思想:我們想象一個炒股票的人,他只會在時機非常明確到來的時候才出手,也就是當排序的時候,找到合適的關鍵字再交換,並且只移動一次。簡單選擇排序的基本思想:每一趟都是在(n-i+1),(i=1,2,

選擇排序C語言實現

選擇排序是不穩定排序,時間複雜度為O(n^2)。   選擇排序類似插入排序,把陣列分為兩部分,一部分已經排好序,一部分未排序。 剛開始的時候所有的元素都未排序,已排序的部分為空。就好像你手裡有十張牌,左手有零張,右手有10張。每次從右手的牌中取最小的一張插入到左手的牌末尾,右手的牌插完了,排序

資料結構 簡單選擇排序C語言實現

       選擇排序的基本思想:每一趟在n-i+1(i=1,2,3,…,n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。 演算法思想       第一趟簡單選擇排序時,從第一個記錄開始,通過n-1 次關鍵字比較,從n 個記錄中選出關鍵字最小的記錄,並和第

氣泡排序C語言實現

氣泡排序是一種穩定排序,時間複雜度平均為O(n^2),最好的時間複雜度為O(n),最壞為O(n^2)。   排序時每次只比較當前元素與後一個 元素的大小,如果當前元素大於後一個元素,則交換,如此迴圈直到隊尾,每輪排序都可以保證將當前排序下最大的元素送到未排序部分的隊尾。 有n個元素要排列,故要

冒泡排序C語言實現

最大的 pri col src 當前 == int bubuko ngs 冒泡排序是一種穩定排序,時間復雜度平均為O(n^2),最好的時間復雜度為O(n),最壞為O(n^2)。 排序時每次只比較當前元素與後一個 元素的大小,如果當前元素大於後一個元素,則交換,如此循環直

插入排序C語言實現

插入排序是穩定排序,時間複雜度最低為O(n),最高為O(n^2),平均為O(n^2)。   插入排序是將陣列分為兩部分,一部分已經排好序,另一部分未排好序,每次從未排好序的部分取第一個元素插入到已經排好序的部分正確的位置,如此迴圈n-1次。 就好像你手裡有十張牌,左手有一張,右手有九張。每次從

簡單選擇排序C語言版本)

基本思想:在陣列中找到最小的數,將其放置到第一個位置,第二小的數,放在陣列中的第二個位置,依次類推。在寫程式碼的開始,竟然與冒泡法的原理混淆,需要注意。 程式碼: #include<stdio.h> #include<windows.h> int

八大排序演算法之三簡單選擇排序c語言

選擇排序—簡單選擇排序(Simple Selection Sort) 基本思想: 在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元

(資料結構排序的實驗四)快速冒泡簡單選擇直接插入排序c語言實現!!

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18p

排序選擇排序C++實現

temp esp col rgb 結果 pac strong emp 元素 # 基本思想 每一趟從待排序的數據元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止。排序實例初始關鍵字 [49 38 65 97 76 13 27 49]第一趟排序後 13

氣泡排序詳細過程c語言實現

此時按道理應該開始第四趟比較,也就是比較4和5,但是我們通過第三趟比較後可以知道,順序已經排好了,所以再次比較,只會增加演算法的時間,降低演算法的效能,所以我們應該設定一個標記變數flag,當比較沒有交換後,我們可以跳出迴圈,列印結果。

[演算法]簡單的揹包問題遞迴解法C語言實現

今天講點簡單的演算法,最簡單的揹包0演算法,使用了遞迴的方法,相信看完程式碼的朋友會發現這段程式碼很熟悉,不過CG提供這些程式碼的目的只是讓全部揹包演算法的完整提供地給大家,程式碼很簡單,相信高手一看就懂,這裡的揹包演算法只是考慮了物品的重量,沒有考慮物品的價值,是初學遞迴演算法的朋友必看的程式碼,高手的話全

排序C語言實現

names 博客 鏈接 c語言實現 建立 ron 要求 clas [1] 之前的博客介紹介紹了數組的兩種排序算法:插入排序和歸並排序(採用遞歸),見鏈接http://blog.csdn.net/u013165521/article/detai

排序C語言實現

emp 定義 als ret std 冒泡 urn merge 結點 #include <stdio.h> #include <string.h>#include <ctype.h> #include <stdlib

歸並排序C語言實現

ngs 基本 merge 兩個 它的 efi 分別是 void rec 合並排序(MERGE SORT)是又一類不同的排序方法,合並的含義就是將兩個或兩個以上的有序數據序列合並成一個新的有序數據序列,因此它又叫歸並算法。 它的基本思想就是假

分享我寫的2D格鬥遊戲C語言實現

fpm cal srm i2c cga wsb rpi blank iii Json、FastJson、Gson 數據結構對單鏈表進行數據排序 請教各位幾個小問題,有點暈了不太理解 StringUtil對字符串類型參數進行校驗的工具類 11r玖橇粱http://p.baid

排序C語言實現

內部排序 利用 int 分治 arr 個數 size quic 外部排序 讀數據結構與算法分析 插入排序 核心:利用的是從位置0到位置P都是已排序的 所以從位置1開始排序,如果當前位置不對,則和前面元素反復交換重新排序 實現 void InsertionSort

雅可比(jacobi)迭代法c語言實現

#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #in

高斯消元全主元素法C語言實現

#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; double A[1010][1010

資料結構和演算法 | 簡單選擇排序演算法原理及實現

選擇排序是一種非常簡單的排序演算法,就是在序列中依次選擇最大(或者最小)的數,並將其放到待排序的數列的起始位置。 簡單選擇排序的原理 簡單選擇排序的原理非常簡單,即在待排序的數列中尋找最大(或者最小)的一個數,與第 1 個元素進行交換,接著在剩餘的待排序的數列