一、测试模板类
在学习排序算法的过程中,初步写了一个测试用的模板类,类的方法中包括排序的算法(待实现),类中目前只实现了小于比较和交换等基础的功能,源代码如下,后续会根据排序算法的不同,实现在模板类的排序方法里。
//sort1.h
#pragma once
#include <iostream>
template<class T>
class arrSort
{
public:
arrSort(T* arr1, int length, bool isSorted = false);
~arrSort() {
};
bool less(int i, int j);
void exch(int i, int j);
void show() const;
void sort();
bool isSorted();
private:
T* arr;
int len;
bool isSort;
};
template<class T>
inline arrSort<T>::arrSort(T* arr1, int length, bool isSorted) :arr(arr1), len(length),isSort(isSorted) {
};
template<class T>
bool arrSort<T>::less(int i, int j)
{
return arr[i] < arr[j] ? true : false;
}
template<class T>
void arrSort<T>::exch( int i, int j)
{
T temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
template<class T>
void arrSort<T>::show() const
{
using namespace std;
for (int i = 0; i < len; i++)
{
cout << arr[i] << ' ';
}
cout << endl;
}
template<class T>
void arrSort<T>::sort()
{
//待实现
isSort = true;
}
template<class T>
bool arrSort <T>::isSorted()
{
return isSort;
}
//@author: px
//@time: 2021/01/30
//@description: 排序算法测试用模板类
#include "sort1.h"
int main()
{
using namespace std;
int num[] = {
1,3,4,2,8,5,2,1 };
arrSort<int> arr1(num, 8);
arr1.show();
arr1.exch(1, 2);
arr1.show();
cout << arr1.less(0, 5) << endl;
return 0;
}
二、选择排序
选择排序是初级排序算法中的一种, 其核心思想是首先找到数组中最小的那一个元素,然后将它和数组第一位元素交换位置,其次,找到数组倒数第二小的那个元素,再与数组第二位元素交换位置,如此进行下去,直到数组最后一位元素也完成操作,根据这个思想,代码实现如下:
template<class T>
void arrSort<T>::sort()
{
//选择排序实现
for (int i = 0; i < len; i++)
{
int minIndex = i;
//j从i+1往后开始查找即可。
for (int j = i + 1; j < len; j++)
{
//假如当前元素小于最小元素就将minIndex更新为当前元素的索引
if (less(j, minIndex))
{
minIndex = j;
}
exch(minIndex, i);
}
}
//将排序标志置1
isSort = true;
}