泛型演算法 快速排序原始碼

2021-06-27 08:24:06 字數 2974 閱讀 1004

好久沒寫這些底層演算法了,趁這個週末有空,順便實現了下。程式裡的指標是否為空都沒有判斷,畢竟這些玩意都是追求速度的嘛!

如有不當之處請指出,歡迎討論!

下面的程式在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...