⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort.cpp

📁 callback demo program, you can learn how to write callback functions
💻 CPP
字号:
#include "stdafx.h"
#include "..\shared\sort.h"
#include <cstdio>

void DLLDIR __stdcall Bubblesort(byte* array, int size, int elem_size, CompareFunction cmpFunc)
{
	for(int i=0; i<size; i++)
	{
		for(int j=0; j<size-1; j++)
		{
			if(1 == (*cmpFunc)(array+j*elem_size, array+(j+1)*elem_size))
			{
				byte* temp = new byte[elem_size];
				memcpy(temp, array+j*elem_size, elem_size);
				memcpy(array+j*elem_size, array+(j+1)*elem_size, elem_size);
				memcpy(array+(j+1)*elem_size, temp, elem_size);
				delete [] temp;
			}
		}
	}
}

void swapit(byte* elem1, byte* elem2, int elem_size)
{
	byte* temp = new byte[elem_size];

	memcpy(temp, elem1, elem_size);
	memcpy(elem1, elem2, elem_size);
	memcpy(elem2, temp, elem_size);

	delete [] temp;
}

void Partition( byte *array, int left, int right, int elem_size, CompareFunction cmpFunc )
{
	byte *pivot_item = new byte[elem_size];

	int i, j;
	if(right > left)
	{
		memcpy(pivot_item, array + right*elem_size, elem_size);
		i = left-1;
		j = right;

		for(;;) 
		{
			while( (*cmpFunc)(array+(++i)*elem_size, pivot_item) == -1 );
			while( (*cmpFunc)(array+(--j)*elem_size, pivot_item) == 1);

			if(i >= j) break;

			swapit(array+i*elem_size, array + j*elem_size, elem_size);
		}

		swapit(array + i*elem_size, array + right*elem_size, elem_size);
		
		Partition(array, left, i-1, elem_size, cmpFunc);
		Partition(array, i+1, right, elem_size, cmpFunc);
	}
	
	delete [] pivot_item;
}

void DLLDIR __stdcall Quicksort(byte* array, int size, int elem_size, CompareFunction cmpFunc)
{
	Partition(array, 0, size-1, elem_size, cmpFunc);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -