// 簡單選擇排序
// 輸出顯示每個排序步驟
// 排序數字最大值不超過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;
}
注:純屬娛樂,代碼不是非常簡潔,歡迎交流簡單選擇排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.