// SortArray.h: CSortArray クラスのインターフェイス
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SORTARRAY_H__BE5E2E9D_D829_4FD0_BC46_19BC2BA817DD__INCLUDED_)
#define AFX_SORTARRAY_H__BE5E2E9D_D829_4FD0_BC46_19BC2BA817DD__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/*!
	ソートとコピーを実装する配列クラス
*/
template< class TYPE, class ARG_TYPE >
class CSortArray : public CArray<TYPE,ARG_TYPE>
{
public:
	//!	ソート
	void Sort()
	{
		int		Max = (int)GetSize(),i,j;
		TYPE	keyitem;

		for(i=1;i<Max;i++)
		{
			keyitem=GetAt(i);

			for(j=i-1;j>=0;j--)
			{
				if(ElementAt(j) > keyitem)
				{
					SetAt(j+1,ElementAt(j));
				}
				else
				{
					break;
				}
			}

			SetAt(j+1,keyitem);
		}
	}

	//!	反転ソート
	void RSort()
	{
		int		Max = (int)GetSize(),i,j;
		TYPE	keyitem;

		for(i=1;i<Max;i++)
		{
			keyitem=GetAt(i);

			for(j=i-1;j>=0;j--)
			{
				if(!(ElementAt(j) > keyitem))
				{
					SetAt(j+1,ElementAt(j));
				}
				else
				{
					break;
				}
			}

			SetAt(j+1,keyitem);
		}
	}

	//!	代入
	void operator=(const CSortArray<TYPE,ARG_TYPE> &other)
	{
		Copy(other);
	}

	//!	コンストラクタ
	CSortArray<TYPE,ARG_TYPE>()
	{
	}

	//!	コピーコンストラクタ
	CSortArray<TYPE,ARG_TYPE>(const CSortArray<TYPE,ARG_TYPE> &other)
	{
		Copy(other);
	}
};

#endif // !defined(AFX_SORTARRAY_H__BE5E2E9D_D829_4FD0_BC46_19BC2BA817DD__INCLUDED_)
