快速排序
2017-09-14 23:34
113 查看
今天发现了自己刚学c时模仿别人交换int数组的快排写的内存交换的快排,和大家分享一下,用法和VS/QT下c库函数相同。
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdbool.h> int My_str_compare(void *data1, void *data2){ if (*(int *)data1 > *(int *)data2){ return 1; } else { return -1; } } int Partition(void *data, int size, int left, int right, int My_compare(void *, void *)) { char *d = (char *)data; int i, mid; char *p = (char *)malloc(size); for (i = left + 1, mid = left; i <= right; i++){ if (My_compare(d + size*i, d + size*left) > 0){ mid++; memcpy(p, d + size*i, size); memcpy(d + size*i, d + size*mid, size); memcpy(d + size*mid, p, size); } } memcpy(p, d + size*mid, size); memcpy(d + size*mid, d+size*left,size); memcpy(d + size*left, p, size); return mid; } void My_qsort(void *data, int size, int left, int right, int My_compare(void *, void *)) { if (left >= right){ return; } int mid = Partition(data, size, left, right, My_compare); My_qsort(data, size, left, mid - 1, My_compare); My_qsort(data, size, mid + 1, right, My_compare); } void My_Qsort(void *data, int size, int count, int My_compare(void *, void*)) { int right = count - 1; int left = 0; My_qsort(data, size, left, right, My_compare); } const int COUNT = 10000; void test(){ int a[COUNT] = { 0 }; srand((unsigned int)time(NULL)); for (int i = 0; i < COUNT; i++){ a[i] = rand() % 100; printf("%d ", a[i]); } printf("\n"); My_Qsort(a, sizeof(a[0]), sizeof(a) / sizeof(a[0]), My_str_compare); for (int i = 0; i < COUNT; i++){ printf("%d ", a[i]); } } int main(void) { test(); system("pause"); return 0; }
相关文章推荐
- Java排序算法——快速排序
- js对象数组按属性快速排序
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- 数据结构实验之排序八:快速排序
- 冒泡排序,选择排序,快速排序
- 排序算法之快速排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 快速排序之按主元分块新方法(值得一看)
- 《算法导论》学习笔记——快速排序
- 快速排序的随机化算法
- CLRS 7.3快速排序的随机化版本
- 最常用的排序——快速排序
- 数据结构面试之十一——排序2(归并、快速、堆排序)
- 排序---交换排序---快速排序Quick Sort
- 快速排序代码
- C# 实现快速排序
- 一看就懂的快速排序方法_java版
- 快速排序
- 冒泡排序,快速排序,堆排序比较(转自:http://linpder.blog.163.com/blog/static/487641020082124532971/)
- 快速排序