C++ 选择排序、冒泡排序、插入排序

//sort.h

#include "stdlib.h"
#include "stdio.h"
#include <iostream>
template<typename T>
class Sort {
 
	public:
		//void SelectSort(T* array, int size);
		void SelectSort(T*arrayint size) {
			int temp = 0;
			for (int i = 0; i < size; i++)
			{
				temp = i;
				for (int j = i + 1; j < size; j++) {//每一次排序确定的是最前面的一个数
					if (array[temp] > array[j]) {//记录一轮比较下来的最大值的地方,和出发的地方进行交换
						temp = j;
					}
				}
				if (temp != i) {
					Swap(array, temp, i);
				}
			}
			std::cout << "SelectSort:";
			for (int i = 0; i < size; i++)
			{
				std::cout << array[i] << std::endl;
			}
		}
		
		//插入排序第一次前两个数进行排序
		//		 第二次前三个数进行排序
		//		 第三次前四个数进行排序
		//template<typename T>
		void Sort::InsertSort(T*arrayint size) {
			for (int i = 1; i < size; i++)
			{
				for (int j = i; j>0; j--)
				{
					if (array[j]<array[j - 1]) {
						Swap(array, j, j - 1);
					}
				}
			}
			std::cout << "InsertSort:";
			for (int i = 0; i < size; i++)
			{
				std::cout << array[i] << std::endl;
			}
		}
		//冒泡排序第一次每两个进行排序,排到最后,那么最大的在最后
		//		 第二次,除去最大的,把剩下的进行第一次那样的排序操作
		//template<typename T>
		void Sort::BubbleSort(T*arrayint size) {//每一次排序确定的是最后面的一个数
 
			for (int i = 0; i < size; i++) {
				for (int j = 1; j < size - i; j++)
				{
					if (array[j]<array[j - 1]) {//小一位大于大一位,那么交换位置
						Swap(array, j, j - 1);
					}
				}
			}
			std::cout << "InsertSort:";
			for (int i = 0; i < size; i++)
			{
				std::cout << array[i] << std::endl;
			}
		}
		
		//template void InsertSort(T* array, int size);
		//template  void BubbleSort(T* array, int size);
		 //template void Sort::Swap(T* array, int x, int y);
		void Sort::Swap(Tarrayint xint y)
		{
			T temp = array[x];
			array[x] = array[y];
			array[y] = temp;
		}
 
	
};
 --------------------------------------------------------------------------------
#include "sort.h"
 
void main() {
 
	int array[] = {1,10,4,2,11,20,14,23,12};
 
	Sort<int> sort;
	sort.BubbleSort(array,9);
	sort.SelectSort(array,9);
	sort.InsertSort(array, 9);
	getchar();
	
 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值