1. 程式人生 > >C++ 簡單選擇排序

C++ 簡單選擇排序

基本思想:第i趟在n-i+1(i=1,2,....,n-1)個記錄中選取關鍵碼最小的記錄作為有序序列的第i個記錄。

需要解決的問題?

(1)如何在待排序序列中選出關鍵碼最小的記錄?

(2)如何確定待排序序列中最小的記錄在有序序列中的位置?

簡單選擇排序實質是一種交換排序,從待排序序列中選取最小的記錄與待排序序列中的最後一個元素進行交換,從而實現一個自增長序列的排序。

因而簡單選擇排序每進行一次掃描,都會選出待排序序列中最小的元素放入有序序列。有序序列中的任何一個元素都比待排序序列中的元素小。進行到第i次掃描時就會得到一個有i個記錄組成的有序序列。這些記錄在有序序列中的位置不會在後面的排序中發生變化。

因而,簡單選擇排序沒進行一次選擇排序都可以唯一確定一個記錄在有序序列中的位置。

時間複雜度分析:

一個有n個記錄組成的序列,需要進行n-1次掃描,第一次掃描(n-1)個記錄,第二次(n-2)個記錄……

因而時間複雜度為:n(n-1)/2              時間複雜度為O(n×n)級

空間複雜度:

需要一個臨時空間儲存 空間複雜度為:O(1);

具體實現程式碼如下:

#include <iostream>

using namespace std;

void selectSort(int r[], int n){
    int i,index,j,temp;
    for(i=1; i<n; i++)//執行第i遍掃描操作
    {
        index = i;
        for(j=i+1; j<n; j++)//比較無序序列中的記錄
        {
            if(r[index] > r[j])//記錄序列中最小值的位置
            {
                index = j;
            }
        }
        if(index != i)//如果無序序列中第一個記錄不是最小值,則進行交換
        {
            temp = r[index];
            r[index] = r[i];
            r[i] = temp;
        }
    }
}

int main()
{
    int r[]  = {0,5,6,8,4,9,6,74,65,123,94};
    int n = sizeof(r)/sizeof(r[0]);
    selectSort(r, n);
    for(int i=1; i<n; i++)
    {
        cout<<r[i]<<"  ";
    }
    return 0;
}


相關推薦

C++ 簡單選擇排序

基本思想:第i趟在n-i+1(i=1,2,....,n-1)個記錄中選取關鍵碼最小的記錄作為有序序列的第i個記錄。 需要解決的問題? (1)如何在待排序序列中選出關鍵碼最小的記錄? (2)如何確定待排序序列中最小的記錄在有序序列中的位置? 簡單選擇排序實質是一種交換排序

C語言:簡單選擇排序

題目描述 編一程式用簡單選擇排序方法對n個整數排序(從大到小)。 對n個數進行降序排列,簡單選擇排序的演算法思想如下: 1)首先通過n-1次比較,從n個元素中找出值最大的元素,將它與第一個元素交換。(第一趟排序)。 2)再通過n-2次比較,從剩餘的n-1個元素中找出值次大的元

c++實現簡單選擇排序和堆排序

接下來我們對簡單選擇排序和堆排序做詳細額介紹,排序過程中使用的資料仍和前兩節排序過程中使用的資料相同:int a[10] = {45,12,36,76,45,9,33,19,87,23}; 1、簡單選

簡單選擇排序C語言實現

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

C語言實現氣泡排序簡單選擇排序

氣泡排序(Bubble Sort)的基本思想為兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。 其時間複雜度為O(n^2)。 簡單選擇排序(Simple Selection Sort)

C語言簡單選擇排序演算法的實現

簡單選擇排序從元素中跳出最小關鍵字,將其放在已排序列的最後,未排序的序列最前,直到全部排序完成為止,其空間複雜度為O(1),時間複雜度為O(n2)。下面是實現程式碼: 首先仍然是預定義和型別定義: #define OK 1 #define ERROR 0 typedef

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

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

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

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

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

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

經典排序算法--簡單選擇排序

減少 pac 高效 str creat election pub 臨時 ack 算法簡介 簡單選擇排序是一種選擇排序。 選擇排序:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。 白話理解   依然已排隊為例,在排隊時,有的老師

排序——直接選擇排序簡單選擇排序

無序 代碼 .... 插入排序 相對 方法 import 排序 color 直接選擇排序也稱簡單選擇排序,是一種相對簡單的排序算法,它的基本思想是:從一列數中找出最小的,和第一個交換;剩下的重新找出最小的,和這列數的第二個交換,......一直進行n-1次比較之後,該數列已

算法一之簡單選擇排序

!= 復雜度 cnblogs 數據 lec 空間 class 相同 i++ 一、 選擇排序的思想 選擇排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基於此思想的算法主要有簡單選擇排序、樹型選擇

排序算法之簡單選擇排序

clip order ng- left 運行 [] cal var ret 基本思想 在一組元素中選擇具有最小排序碼的元素,若它不是這組元素中的第一個元素,則將它與這組元素中的第一個元素對調;在未排序的剩下的元素中反復運行以上步驟,直到剩余元素僅僅有一

C語言選擇排序

c/c++ 排序 #include <iostream> #include <stdio.h> using namespace std; int data[]={2,1,3,8,6,7,9}; int main(int argc, char* argv[]) {

簡單選擇排序SelectSort

lec rtm system 最小數 string ted 一個 排序 ner package com.cc.dataconsttuct.com; /*** * 簡單選擇排序:令A[0,n-1]有n個數據元素的數組,將數組A排列為一個非降序的有序數組; * 算法:首先在n個

算法(二) 簡單選擇排序

簡單選擇排序從左到右依次選取一個值作為默認最大值,依次與其它值比較,如果有值比該值大,那最大值指針改指向該值,一輪比較完成後,如果最大值指針沒有變化,則從下一個值繼續下一輪比較,如果指針有變動,則最新指針位置的數值與初始指針位置數值交換位置。代碼如下:lst1 = [ [1, 8, 9, 5, 6,

簡單選擇排序

pac ace iostream str names std nbsp ios color 簡單選擇排序 #include<iostream> using namespace std; int main() { int r[100]; int

排序算法-簡單選擇排序

ace wid sim oid ogr pre threading inf aar 實現: using System; using System.Collections.Generic; using System.Linq; using System.Text; us

算法3-排序-簡單選擇排序

sharp blog mage sel 一個數 http println for image 基本思想:在要排序的一組數中,選出最小的一個數與第一個位置的數交換; 然後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較為止。 publi

簡單選擇排序和直接插入排序

當前 出現 一個數 堆排 逆序 排好序 int swa 數據對比 簡單選擇排序 簡單選擇排序就是通過關鍵字之間的比較,在記錄裏面找到最小(或者最大)的數字,並同當前位置交換之。 貼個代碼: void SelectSort(SqList *L) { int i, j