选择排序(SelectSort) -- C++实现


实现代码

// SelectSort.h
#ifndef SELECTSORT_H
#define SELECTSORT_H

#include<iostream>
using namespace std;

namespace jay{

	template<typename T>
	void ExchangeArrayElements(T *input,int i,int j)
	{
		if (i == j)
		{
			return ;
		}

		T temp;
		temp = input[i];
		input[i] = input[j];
		input[j] = temp;
	}

//	template< typename T, int INPUT_LEN >
	template< typename T >
	void SelectSort(T *input,int input_len )
	{
		T smallindex;
		for (int i=0;i<input_len;i++)
		{
			smallindex = i;
			for (int j=i+1;j<input_len;j++)
			{
				if (input[smallindex] > input[j])
				{
					smallindex = j;
				}
			}

			// 交换值
            // 百万级别以上的数据请考虑就地展开处理,不要调用函数[inline效果不明显]
			ExchangeArrayElements<T>(input,i,smallindex);

		}
	}
};

#endif

测试代码

//main.cpp

#include <time.h>
#include<windows.h>

#include <iostream>
using namespace std;

#include "myprint.h"
#include "SelectSort.h"
using namespace jay;

class TimeCalculator
{
public: 
	TimeCalculator()
	{
		m_dtimebegin = clock();
	}

	void PrintTimeInfo()
	{
		double dstop,ddurationTime;
		dstop = clock();
		ddurationTime = ((dstop-m_dtimebegin));

		cout << "操作耗时:" << ddurationTime << " ms" << endl;
	}

	void RestartBegin()
	{
		m_dtimebegin = clock();
	}

private:
	double m_dtimebegin;
};

int main(int argc, char* argv[])
{
	TimeCalculator timec;

	int iElentmentsCunt(0) ;
	cin>>iElentmentsCunt;
	int *testarray = new int[iElentmentsCunt];

	int iCount = 0;
	int p;
	while(cin>>p)
	{
		
		testarray[iCount] = p;

		iCount++;
	}

	PrintArray<int>(testarray,iCount,"排序前:");
	SelectSort<int>(testarray,iCount);
	PrintArray<int>(testarray,iCount,"排序后:");

	delete []testarray;

	// 打印操作耗时
	timec.PrintTimeInfo();

}

 

暂无评论

注册用户登录后才能发表或者回复评论,请先登录 注册。