簡單選擇排序

//  簡單選擇排序
//  輸出顯示每個排序步驟
//  排序數字最大值不超過1000000

//  輸入:
//       排序的數字個數n,及對應的排序數組
//  輸出:
//      第1行:初始序列
//      第2行到第n+1行:輸出排序的過程
//      第n+2行:排序結果

#include <iostream>
#include <stdlib.h>
using namespace std;
#define INF 1000000

template<class T>  
void SelectSort(T A[], int n)  
{  
    int small;  
    Print(A,n,-1);
    for (int i=0;i<n-1;i++)  
    {  
        small=i;  
        for (int j=i+1;j<n;j++)  
            if (A[j]<A[small])  
                small=j;  
            swap(A[i],A[small]);  
            Print(A,n,i);
    }  
    Print(A,n,n);
}  

template < class T >
void Print(T A[], int n , int i)
{
    int j;
    if (i>=0 && i<n)
    {
        std::cout<<"第 "<<i+1<<" 趟 : ";
        std::cout<<"( ";
        for (j=0;j<=i;j++)
            std::cout<<A[j]<<" ";
        std::cout<<") ";
        for (j=i+1;j<n;j++)
            std::cout<<A[j]<<" ";
        std::cout<<endl;
    }
    else if (i<0 || i>=n)
    {
        if (i<0)
            std::cout<<"初始數列 : ( ";
        else
            std::cout<<"排序結果 : (";
        for (j=0;j<n;j++)
            std::cout<<A[j]<<" ";
        std::cout<<")"<<endl;
    }
}
// 應用舉例
int main()
{
    int n;
    std::cin>>n;
    int *a;
    a=new int [n];
    for (int i=0;i<n;i++)
    {
        std::cin>>a[i];
    }
    SelectSort(a,n);
    return 0;
}


注:純屬娛樂,代碼不是非常簡潔,歡迎交流

發佈了27 篇原創文章 · 獲贊 13 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章