1. 程式人生 > >八種排序方法(一)——選擇排序

八種排序方法(一)——選擇排序

編譯器:Xcode
程式語言:C++

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

例如:
待排序列: 43,65,4,23,6,98,2,65,7,79
第一趟: 2,65,4,23,6,98,43,65,7,79
第二趟: 2,4,65,23,6,98,43,65,7,79
第三趟: 2,4,6,23,65,98,43,65,7,79
第四趟: 2,4,6,7,43,65,98,65,23,79
第五趟: 2,4,6,7,23,65,98,65,43,79
第六趟: 2,4,6,7,23,43,98,65,65,79
第七趟: 2,4,6,7,23,43,65,98,65,79
第八趟: 2,4,6,7,23,43,65,65,98,79
第九趟: 2,4,6,7,23,43,65,65,79,98

選擇排序的時間複雜度為:O(n^2),空間複雜度:O(1)

選擇排序是不穩定的;

源程式:

#include <iostream>
using namespace std;

void SelectSort(int a[],int n) //選擇排序
{
    int mix,temp;
    for(int i=0;i<n-1;i++) //每次迴圈陣列,找出最小的元素,放在前面,前面的即為排序好的
    {
        mix=i; //假設最小元素的下標
        for(int j=i+1;j<n;j++) //將上面假設的最小元素與陣列比較,交換出最小的元素的下標
if(a[j]<a[mix]) mix=j; //若陣列中真的有比假設的元素還小,就交換 if(i!=mix) { temp=a[i]; a[i]=a[mix]; a[mix]=temp; } } } int main() { int a[10] = {43, 65, 4, 23, 6, 98, 2, 65, 7, 79}; cout<<"選擇排序:"<<endl; SelectSort(a, 10
); for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; return 0; }

執行結果:

選擇排序:
2 4 6 7 23 43 65 65 79 98 
Program ended with exit code: 0

相關推薦

排序方法——選擇排序

編譯器:Xcode 程式語言:C++ 選擇排序的基本思想: 每一趟在n-i+1(i=1,2,3…,n-1)個記錄中選取關鍵字最小的記錄與第i個記錄交換,並作為有序序列中的第i個記錄。

排序演算法選擇排序和氣泡排序

1. 選擇排序: 選擇排序是一種很簡單直觀的排序方法,就是在未排序的資料中挑選出最大或者最小的元素,存放到已排序資料的末尾。 簡單的講,就是每次都把最大或者最小的資料挑選出來,然後依次組成新的序列。 假設有資料{1,4,6,8,3,4,0,2,14},要按照從大到小進行

排序方法——歸併排序

編譯器:Xcode 程式語言:C++ 源程式: #include<iostream> using namespace std; void merge(int a[],int l

【算法】排序選擇排序

如何 接下來 運行時 images 復雜度 分析 穩定性 stat ima 在排序算法中,最簡單的莫過於選擇排序了。 排序思路: 在選擇排序算法中分別有一個外循環和一個內循環,假設需要排序的序列共有n個元素,所以外循環的次數為n次,在n次交換(外循環)中,每次設置序列中的第

排序演算法氣泡排序,簡單選擇排序,直接插入排序,希爾排序

氣泡排序,簡單選擇排序,直接插入排序是三種複雜度為O(n2)的演算法,希爾排序在特殊增量序列的時候可以獲得複雜度為O(n3/2) 氣泡排序 1、最簡單的排序實現 這裡把每個數和這個數之後的每個數比較,大於就交換位置。 缺點:多出了很多次沒有用的交

Android實現日夜間模式的三常用方法

 1、使用 setTheme 的方法讓 Activity 重新設定主題;  2、設定 Android Support Library 中的 UiMode 來支援日間/夜間模式的切換;  3、通過資源 id 對映,回撥自定義 ThemeChangeListener 介

C#演算法-----選擇排序

嗨!朋友們,C#將是未來網路開發的首選語言。本人用了C#開發出選擇排序演算法。希望能為C#語言的學習者帶來一些益處。      不要忘了,學語言要花大力氣學資料結構和演算法。 using System;public class SelectionSorter{  // pub

排序演算法總結——選擇排序

選擇排序的基本宗旨就是每次選出剩餘元素中最大的或者最小放在最終排序的對應位置。 1.直接選擇排序 基本思想: 在a[1]-a[n-1]中選擇最小的元素和a[0]交換; 在a[2]-a[n-1]中選擇最小的元素和a[1]交換; …… 在a[i]-a[n

排序演算法------氣泡排序

氣泡排序 氣泡排序: 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止 氣泡排序是將比較大的數字沉在最下面,較小的浮在上面 最簡單的氣泡排序 /* * 嚴格意義上說不滿足氣泡排序思想,應該是最簡單的交換排序而已 * 思路:讓每一個關鍵字

java排序演算法------選擇排序

選擇排序 基本思想:每一趟從待排序的資料元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。 選擇排序的時間複雜度和空間複雜度分別為 O(n2 ) 和 O(1) 程式碼實現: public static void s

java排序演算法----選擇排序

選擇排序(Selection Sort)  選擇排序(Selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從

排序演算法——選擇排序

選擇排序(Selection sort)是一種簡單直觀的排序演算法。選擇排序的交換操作介於和次之間。選擇排序的比較操作為次。選擇排序的賦值操作介於和次之間。 運作方式如下: 1.首先從原始陣列中選擇最小的1個數據,將其和位於第1個位置的資料交換。 2.接著從剩下的n-1個數據中選擇次小的

8大排序之-----3選擇排序與時間複雜度

                                                     選擇排序與時間複雜度 (一)選擇排序的基本思想:選擇排序就是每一次從待排序的資料中選出最小的元素,放到已經排好序的資料的最後位                    

排序演算法——選擇排序及改進

選擇排序 基本思想 氣泡排序中有一個缺點,比如,我們比較第一個數a1與第二個數a2的時候,只要a1比a2大就會交換位置,但是我們並不能確定a2是最小的元素,假如後面還有比它更小的,該元素還會與a2

程式猿必懂的排序方法1--插入排序

直接插入排序--基本思想  在要排序的一組數中,假設前面的(n-1)[n>=2] 個數已經是排好序的。現在要把第n個數插入到前面的有序數中,使得n個數也是排好序的。如此反覆迴圈,直到全部排好順序。 上程式碼 : /** * 插入排序 * 平均O(n^2),最好O(

快速排序的兩實現方法js

while 交換 splice rt+ dex 進行 return ont mat 快速排序的基本思想:通過一趟排序,將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另外一部分記錄的關鍵字小,則可分別對著兩部分記錄繼續進行排序,以達到整個序列有序的目的。------

必須知道的八大排序演算法【java實現】 選擇排序,插入排序,希爾演算法【詳解】

一、選擇排序   1、基本思想:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止。   2、例項   3、演算法實現    /** * 選擇排序演算法 * 在未

必須知道的八大排序演算法【java實現】 氣泡排序、快速排序

氣泡排序   氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。   氣泡排序的示例:   氣

結構化大資料計算的幾方法

         任何資料都要通過計算來產生價值才有意義,大資料也一樣。結構化大資料的計算能力的高低決定了大資料的實用性。          我總結了幾種常見的計算方法:API 、Script、SQL、類SQL。        1、  API:這是指沒有使用JDBC或OD

Java實現幾常見排序方法 .

 插入排序的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。其具體步驟參見程式碼及註釋。 [java] view plaincopyprint? /**  * 插入排序<br/>  * <ul>