好久沒寫這些底層演算法了,趁這個週末有空,順便實現了下。程式裡的指標是否為空都沒有判斷,畢竟這些玩意都是追求速度的嘛!
如有不當之處請指出,歡迎討論!
下面的程式在vs2008下測試通過,以下是執行結果:
1.標頭檔案 myalgorithm.h
#ifndef _myalgorithm_h_13551534
#define _myalgorithm_h_13551534
typedef bool (*funccompare)(void *p1, void *p2);
typedef void (*funcuser)(void *p);
void foreach(void *begin, void *end, int ntypesize, funcuser func);
void* preprocess(void *begin, void *end, int ntypesize, funccompare func);
void qsort(void *begin, void *end, int ntypesize, funccompare func);
#endif
2.原始檔 myalgorithm.cpp
#include "myalgorithm.h"
#include "string.h"
void foreach(void *begin, void *end, int ntypesize, funcuser func)
}void* preprocess(void *begin, void *end, int ntypesize, funccompare func)
while(i < j && func(i, pivot)) i += ntypesize;
if (i < j)
}memcpy(i, pivot, ntypesize);
delete pivot;
pivot = null;
return i;
}void qsort(void *begin, void *end, int ntypesize, funccompare func)
}
3. 客戶端實現qsort.cpp
#include "stdio.h"
#include "stdlib.h"
#include "myalgorithm.h"
typedef struct _person
person;
bool compareint(void *p1, void *p2)
bool comparestr(void *p1, void *p2)
else if (*c1 < *c2)
++c1;
++c2;
} return true;
}bool comparepersonbyid(void *p1, void *p2)
bool comparepersonbyname(void *p1, void *p2)
void printint(void *p)
void printstr(void *p)
void printpersoninfo(void *p)
int _tmain(int argc, _tchar* argv)
; printf("原始資料:\n");
foreach(arr, arr + 10, 4, printint);
printf("\n");
qsort(arr, arr+10, 4, compareint);
printf("排序後:\n");
foreach(arr, arr + 10, 4, printint);
printf("\n\n");
//字串排序
printf("************字串排序************\n");
printf("原始資料:\n");
char* szname = ;
foreach(szname, szname+6, 4, printstr);
printf("\n");
qsort(szname, szname+6, 4, comparestr);
printf("排序後:\n");
foreach(szname, szname+6, 4, printstr);
printf("\n\n");
//結構體排序
person person[6] = ;
// 1. 按id排序
printf("************結構體排序************\n");
printf("原始資料:\n");
foreach(person, person + 6, sizeof(person), printpersoninfo);
printf("\n按id排序:\n");
qsort(person, person + 6, sizeof(person), comparepersonbyid);
foreach(person, person + 6, sizeof(person), printpersoninfo);
printf("\n");
// 2. 按名稱排序
printf("\n按名稱排序:\n");
qsort(person, person + 6, sizeof(person), comparepersonbyname);
foreach(person, person + 6, sizeof(person), printpersoninfo);
printf("\n");
system("pause");
return 0;
}
快速排序 泛型實現
快速排序由氣泡排序演化而來 快速排序在每一輪挑選乙個基準元素 讓比他大的元素移動到數列的另一邊 比較小的元素移動到數列的一邊 這裡是使用了策略模式 把介面忽略就可以了 public class quicksort comparable implements strategy private stat...
QuickSort快速排序原始碼
include stdafx.h templateclass quicksort static void innersort t arr,int start,int end,bool usedesc 一般用第乙個作為劃分標準 也可以從陣列裡隨機乙個作為劃分標準 甚至用其中兩個的平均或者整個陣列的平均...
自己寫的快速排序演算法(原始碼)
includevoid swap int a,int b int partition int key,int left,int right,int array list array list low array list high swap array list high array list lo...