巨丑的一段冒泡排序,前辈们给点意见,该怎么修改。
本帖最后由 guangzhanzb 于 2013-11-25 16:50:08 编辑
void CODAngleLine::bubbleSort(std::vector<CPoint>& orderless, BOOL byX, BOOL bigTail)
{
BOOL hadSort = FALSE;
for(int i=0; i<orderless.size(); i++){
for(int j = 0; j < orderless.size()-i-1; j++){
if(byX){
if(bigTail){
if((orderless)[j].x > orderless[j+1].x){
hadSort = TRUE;
CPoint tmp = orderless[j];
orderless[j] = orderless[j+1];
orderless[j+1] = tmp;
}
}else
{
if((orderless)[j].x < orderless[j+1].x){
hadSort = TRUE;
CPoint tmp = orderless[j];
orderless[j] = orderless[j+1];
orderless[j+1] = tmp;
}
}
}else{
if(bigTail)
{
if((orderless)[j].y > orderless[j+1].y){
hadSort = TRUE;
CPoint tmp = orderless[j];
orderless[j] = orderless[j+1];
orderless[j+1] = tmp;
}
}else
{
if((orderless)[j].y < orderless[j+1].y){
hadSort = TRUE;
CPoint tmp = orderless[j];
orderless[j] = orderless[j+1];
orderless[j+1] = tmp;
}
}
}
}
if(!hadSort){
break;
}
}
}
#include <iostream>
using namespace std;
void BubbleSort(int sortArray[], int length, bool bigTail = true);
void PrintArray(int sortArray[], int length);
int main()
{
int iTestArray[12] = {10, 2, 23, 4, 23, 22, 4, 98, 0, 1, 54, 9};
// 把byX判断移动到这里,因为byX判断是你的业务,业务就不要和算法混合在一起,很容易搞乱的
if (/*byX*/)
{
BubbleSort(iTestArray, 12, false);
}
// 等等
PrintArray(iTestArray, 12);
}
void BubbleSort(int sortArray[], int length, bool bigTail)
{
for (int i = 0; i < length; ++i)
{
for (int j = 0; j < length - i - 1; ++j)
{
if (bigTail)
{
if (sortArray[j] > sortArray[j + 1])
{
int temp = sortArray[j];
sortArray[j] = sortArray[j + 1];
sortArray[j + 1] = temp;
}
}
else
{
if (sortArray[j] <= sortArray[j + 1])
{
int temp = sortArray[j];
sortArray[j] = sortArray[j + 1];
sortArray[j + 1] = temp;
}
}
}
}
}
void PrintArray(int sortArray[], int length)
{
for (int i = 0; i < length; ++i)
{
cout<<sortArray[i]<<" ";
}
cout<<endl;
}
bool bubbleSort(List _list, Rule _rule)
{
return _list.BubbleSortByRules(_rule);
}
bool BubbleSort(Rule _rule)
{
for(int i = 0; i < size; ++i)
{
for(int j = 0; j < size-i-1; ++j)
{
if(ShouleSwapByRules(Vec[j], Vec[j+1], _rule))
SWAP(Vec[j], Vec[j+1]);
}
}
}
typedef int (*point_comparer)(const CPoint& p1, const CPoint& p2);
void bubbleSort(vector<CPoint>& orderless, point_comparer comparer) {
typedef vector<CPoint>::iterator iterator_type;
iterator_type begin = orderless.begin(), //
end = orderless.end(), //
last = end - 1;
for (iterator_type i = begin; i != last; i++) {
for (iterator_type j = i + 1; j != end; j++) {
if (comparer(*i, *j) > 0) {
swap(*i, *j);
}
}
}
}