[C][代码实例]整型数组二分排序
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h> void _qsort(void*, size_t, size_t);
void vswap(void*, void*, size_t); int main(void)
{
int int_1[] = {
85,9,32,64,12,7,9,51,2,63
};
size_t len = sizeof(int);
/*char int_1[] = {
85,9,32,64,12,7,9,51,2,63
};
size_t len = sizeof(char);*/ size_t count = sizeof(int_1)/len;
void *p_1 = malloc(count*len);
memcpy(p_1, int_1, count*len); _qsort(p_1, count, len);
printf("ALL Done-----------------\n"); size_t total_len = len * count;
int i = 0;
for (; i < total_len; ++i)
{
if(i%len != 0)
{
continue;
}
printf("%d,", *((int *)(p_1+i)));
//printf("%d\n", *((char *)(p_1+i)));
}
printf("\n"); }
void _qsort(void *p, size_t count, size_t len)
{
if(count == 2)
{
if( *((int*)(p)) > *((int*)(p+len)) )
{
vswap(p, p+len, len);
}
}
if(count > 2)
{
int mid_edge = (count + count%2)/2 - 1;
size_t total_len = len * count;
void *p_t = malloc(total_len);
int i = 0;
int index = 0;
int l_count = 0;
int r_count = 0;
for (; i < total_len; ++i)
{
if(i%len != 0)
{
continue;
}
if(i/len == mid_edge)
{
continue;
}
if( *((int*)(p+i)) <= *((int*)(p+(mid_edge*len))) )
{
memcpy(p_t+(index*len), p+i, len);
printf("l :%d, val :%d\n", index, *((int*)(p+i)));
index++;
l_count++;
}
}
//set mid
memcpy(p_t+(index*len), p+(mid_edge*len), len);
printf("mid_edge :%d, val :%d\n", index, *((int*)(p+(mid_edge*len))));
index++;
//set right
i = 0;
for (; i < total_len; ++i)
{
if(i%len != 0)
{
continue;
}
if(i/len == mid_edge)
{
continue;
}
if( *((int*)(p+i)) > *((int*)(p+(mid_edge*len))) )
{
memcpy(p_t+(index*len), p+i, len);
printf("r :%d, val :%d\n", index, *((int*)(p+i)));
index++;
r_count++;
}
} memcpy(p, p_t, total_len);
free(p_t);
//recursive
printf("%d\n", l_count);
printf("%d\n", r_count);
printf("Done-----------------\n");
_qsort(p, l_count, len);
_qsort(p+((l_count+1)*len), r_count, len);
}
} void vswap(void *p_1, void *p_2, size_t len)
{
void *p_t = malloc(len);
memcpy(p_t, p_1, len);
memcpy(p_1, p_2, len);
memcpy(p_2, p_t, len);
free(p_t);
}
[C][代码实例]整型数组二分排序的更多相关文章
- java 整型数组基本排序,冒泡,快速选择,插入,归并
在学java泛型,于是把排序拿来练练手了 import java.util.Arrays; public class GenericArraySort { public static void mai ...
- Java整型数组的最大长度到底有多长?
Java整型数组的最大长度到底有多长? 今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse ...
- Android jni 编程3(对基本类型一维整型数组的操作)总结版
主要学习资料:黑马程序员的NDK方法使用(生产类库so) jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...
- Android jni 编程2(对基本类型一维整型数组的操作)
参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...
- 剑指offer40:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
1 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 2 思路和方法 (1)异或:除了有两个数字只出现了一次,其他数字都出现了两次.异或运算中,任 ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 实验12:Problem H: 整型数组运算符重载
Home Web Board ProblemSet Standing Status Statistics Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...
- c# 计算一个整型数组的平均
一个整型数组的平均: class Program { static void Main(string[] args) { ,,,,,,,,,}; double avg= GetAvg(array); ...
- Android jni 编程4(对基本类型二维整型数组的操作)
Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...
随机推荐
- redis基本操作
''' pip install redis redis 可以看成内存中的大字典 redis五大数据类型 --> 指的是第一层的value值的类型 - 字符串 "k1" - 列 ...
- http.lua里的装饰器
摘自:http.lua local co_yield = coroutine.yield local co_create = coroutine.create local co_status = co ...
- IIS 常见异常及解决办法
Ø 简介 IIS 是我们平常接触比较多的服务端软件,用于站点发布等,本文主要记录 IIS 常见的异常及解决办法.主要包括: 1. Visual Studio 启动 Web 项目提示"无 ...
- Linux文件权限设置
基本概念 https://linux.cn/article-7418-1.html#3_8880 用户管理 文件权限设置 -添加用户账户08% -理解 /etc/passwd 中的内容12% -理解 ...
- tensorflow--logistic regression
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist=input_data. ...
- ROI Pooling层详解
目标检测typical architecture 通常可以分为两个阶段: (1)region proposal:给定一张输入image找出objects可能存在的所有位置.这一阶段的输出应该是一系列o ...
- Git配置信息相关命令
查看git所有配置项 $ git config -l or $ git config --list 全局配置用户名邮箱 $ git config --global user.name "yo ...
- 启动CDH的cloudera-scm-server报错Error: JAVA_HOME is not set and Java could not be found
1 报错信息如下 +======================================================================+| Error: JAVA_HOME ...
- Python文件读取常用方法
1. 关于读取文件 f.read() 读取文件中所有内容 f.readline() 读取第一行的内容 f.readlines() 读取文件里面所有内容,把每行的内容放到一个list里面 注:因为文件指 ...
- CPU缓存一致性协议—MESI详解
MESI(也称伊利诺斯协议)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用在Intel奔腾系列的CPU中. MESI协议中的状态 CPU中每个缓存行使用的4种状态进行标记(使用额外的两位b ...