📄 sort.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 + -