数据结构与算法(二)排序算法详解及实现:选择排序、插入排序、希尔排序、归并排序、快速排序和堆排序

一、测试模板类

在学习排序算法的过程中,初步写了一个测试用的模板类,类的方法中包括排序的算法(待实现),类中目前只实现了小于比较和交换等基础的功能,源代码如下,后续会根据排序算法的不同,实现在模板类的排序方法里。

//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;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值