1. 程式人生 > >003.選擇排序—簡單選擇排序(Simple Selection Sort)

003.選擇排序—簡單選擇排序(Simple Selection Sort)

#include <stdlib.h>
#include <stdio.h>


#define  aray_num 10


void printfArray(int list[])
{
    int i;
    for(i=0; i<aray_num-1; i++)
    {
        printf("%d, ", list[i]);
    }
    printf("%d\n", list[aray_num-1]);
}


void simleSelectSort1(int list[], int n)
{
    int i=0, j=0;
    
    //用來儲存最小值得索引
    int mini_index = 0;
    
    int temp=0;


    //需要遍歷獲得最小值的次數
    //要注意一點,當要排序N個數,已經經過N-1次遍歷後,已經是有序數列
    for(i=0; i<n-1; i++)
    {
        mini_index = i;


        //尋找第i個小的數值
        for(j=i+1; j<n;j++)
        {
            if(list[mini_index] > list[j])
            {
                mini_index = j;
            }
        }


        //將找到的第i個小的數值放在第i個位置上
        if(mini_index != i)
        {
            temp = list[i];
            list[i] = list[mini_index];
            list[mini_index] = temp;
        }
    }
    
    return;
}


void simleSelectSort2(int list[],int n) {  
    int i ,j , min ,max, tmp;  
    
    for (i=1 ;i <= n/2; i++) 
    {    
        // 做不超過n/2趟選擇排序   
        min = i; max = i ; //分別記錄最大和最小關鍵字記錄位置  
        for (j= i+1; j<= n-i; j++) 
        {  
            if (list[j] > list[max]) 
            {   
                max = j ; 
                continue;   
            }    
            
            if (list[j]< list[min]) 
            {   
                min = j ;   
            }     
      }    
      
      //該交換操作還可分情況討論以提高效率  
      tmp = list[i-1]; 
      list[i-1] = list[min]; 
      list[min] = tmp;  
      
      tmp = list[n-i]; 
      list[n-i] = list[max]; 
      list[max] = tmp;   
  
    }   
}  






int main(int argc, char **argv)
{
    //初始化一個序列
    int aray1[aray_num] = {50, 123, 543, 187, 49, 30, 0, 2, 11, 100};


    printf("before sort, the data is :");
    printfArray(aray1);


    //呼叫簡單排序方法
    simleSelectSort1(aray1, aray_num);


    printf("after sort, the data is :");
    printfArray(aray1);


    system("pause");
    
    return 0;
}

相關推薦

003.選擇排序簡單選擇排序Simple Selection Sort

#include <stdlib.h>#include <stdio.h>#define  aray_num 10void printfArray(int list[]){    int i;    for(i=0; i<aray_num-1; i++)    {       

排序演算法(三):簡單選擇排序Simple Selection Sort

基本思想: 在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後一個數)比較為止。 簡單選擇排序的示例: 操作方法: 第一趟,從n

簡單選擇排序simple Selection Sort

演算法思想:每一趟從待排序的記錄中選出關鍵字的最小記錄,按照順序放在已排序的記錄序列的最後,直到全部排完。 時間複雜度:O(n^2)–兩層迴圈,並沒有優化的方法。 空間複雜度:O(1)—–記錄交換時候需要一個輔助空間 演算法特點:穩定性可以控制。可以用鏈式

排序演算法---簡單插入排序Simple insertion sort

簡單插入排序是由n-1趟排序組成,簡單來說,就是假定一個長度為n的陣列,把第0位作為起始位,並認為有序(只有一個元素嘛),然後遍歷從1到n-1下標的元素,每次遍歷一個進行一次排序,直到n-1趟排序完成,這個排序的演算法複雜度最優的情況下,為O(n),最壞的情況下還是O(n的平方); 程式碼如

簡單線性迴歸Simple Linear Regression

1、簡單線性迴歸模型舉例: 汽車賣家做電視廣告數量與賣出的汽車數量: 如何訓練適合簡單線性迴歸模型的最佳迴歸線? 使sum of squares最小 計算 分子 = (1-2)(14-20)+(3-2)(24-20)+(2-2)(18-20)+(1-2)(17-2

簡單工廠模式simple factory pattern

vs2005+C#+.net 2.0  using System;using System.Collections.Generic;using System.Text;namespace SimpleFactoryPattern...{    publicclass S

建立型模式——簡單工廠模式Simple Factory Pattern

開頭  我們可以將設計模式分為三大類,分別為建立型模式、結構型模式、行為型模式,每種模式有著各自的特點。  建立型模式——它是用來描述如何建立物件的。  思維導圖:建立型模型分類建立型模式又分為簡單工廠

簡單工廠模式Simple Factory Pattern學習

書籍:《C#設計模式》(《C# Design Patterns:A Tutorial》) 【美】 James W.Cooper 著  張志華 劉雲鵬 等譯 簡單工廠模式:簡單工廠類根據提供給它的資料,返回幾個可能類中的一個類的例項。通常它返回的類都有一個共同的父類和共同的方

設計模式學習筆記--簡單工廠模式Simple Factory Pattern【建立型模式】

簡單工廠模式: 工廠是用來生成產品的,簡單工廠,說明工廠能力有限因此只生成一個系列的產品。 此係列產品提供一個產品抽象,具體的產品在派生產品中進行實現。 簡單工廠(一個類),用來管理這個系列產品的生產。工廠中會有一個creat(char* name)成員函式name是需要生

DB2資料庫查詢過程Query Processing----簡單索引訪問Simple Indexed Access

索引對於資料庫的效能有著舉足輕重的作用。上一篇文章已經介紹了沒有索引的情況下表掃描訪問相關知識,本文討論有索引的情況下資料庫系統如何使用索引進行資料訪問,內容會比較複雜,強烈建議參看《深入理解DB2索引(Index)》,理解DB2索引的結構,特別是B+樹後再閱讀本文,否則看

設計模式-3簡單工廠模式Simple Factory Pattern

一、引言 在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說, 許多型別物件的創造需要一系列的步驟: 你可能需要計算或取得物件的初始

簡單選擇排序(Simple Selection Sort)

enc main as2 gdt knn tns bof pll n+1 body, table{font-family: 微軟雅黑; font-size: 13.5pt} table{border-c

排序演算法選擇排序 —— 簡單選擇排序 和 堆排序

1、簡單選擇排序簡單選擇排序思想是:從頭到尾(從後往前也行)遍歷序列,先固定第一個位置的資料,將該位置後面的資料,依次和這個位置的資料進行比較,如果比固定位置的資料大,就交換。這樣,進行一趟排序以後,第一個位置就是最小的數了。然後重複進行,第 2 次遍歷並且比較後,第二個位置

排序簡單選擇排序(Simple Selection Sort)

簡單選擇排序(Simple Selection Sort)基本思想:     首先在待排序序列中選擇最小的元素與序列的第一個位置元素交換,然後在剩餘序列中再找出最小的元素與第二個     位置元素交換。以此類推,直至第n-1個元素與第n個元素比較交換為止;(也可以理解為依次

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

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

排序-簡單選擇排序

pack args n-1 ring chang 算法 new 而後 int 算法思想: 每次從序列 (i=0.1.2.......n-1) 中選出一個i值作為最大或者最小值如此下去完成排序,具體做法是假定,i是最小或最大,再和i+1 .....n-1的值比較,以確定最大

選擇排序Selection sort

選擇排序算是對氣泡排序的一種改進:假設有n個待排列的資料,在第一輪遍歷中,仍進行n - 1次比較,遍歷的時候用當前數與當前獲得的最大數進行比較,而不是相鄰的資料進行比較,且僅進行一次資料交換。而氣泡排序在每一次比較的過程中,發現數據順序不一致就交換,資料交換的次數更多。選擇排序只需要用標記記住每一輪的最大數,

一、選擇排序Selection sort

一、選擇排序         選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的資料元素

資料結構之內部排序--簡單選擇排序

目錄 概要 演算法思想 演算法分析 穩定性與時間複雜度 Python程式碼清單 有什麼問題請聯絡我 概要 -IDE:Pycharm -Python版本:python3.x -演算法分類:內部排序->選擇類排序->簡單選擇排序 演算法思想 第

選擇排序---簡單選擇排序

 將陣列第一個數字,依次和陣列後面的數字比較,將小的數字放到最前面。。   1 public class SelectSort { 2 public static void main(String[] args) { 3 int[] arr=new int[]