程序代码:
void swap(const void * p1 , const void * p2 ,int size)
{
int i = 0;
for (i = 0; i < size ; i++)
{
char temp = *((char *)p1 + i);
*(( char *)p1 + i) = *((char*) p2 + i);
*(( char *)p2 + i) = temp;
}
}
void buble(void *base, int count , int size, int (*compare )(const void *, const void *))
{
int i = 0;
int j = 0;
for (i = 0; i < count ; i++)
{
for (j = 0; j < count - i - 1; j++)
{
if (compare (((char*) base + size *j), ((char*) base + size *(j + 1)))>0)
{
swap((( char *)base + size*j), (( char *)base + size *(j + 1)), size );
}
}
}
}
你可以重新建立一个头文件,把它放在你建立的头文件中,然后在排序字符串或者排序整型时,把你建立的头文件加上就能使用他了,当然你也可以把它放在你的程序中运用。
假如我在VS2013中建立一个“sort.h“的头文件,然后我在我的”.c“文件中写一个排整型的程序:
#include<stdio.h>
#include<sort.h>
#include<stdlib.h>
int int_cmp(const void * p1 , const void * p2 )
{
if (*(int *)p1 > *( int *)p2 )
{
return 1;
}
if (*(int *)p1 == *( int *)p2 )
{
return 0;
}
else
{
return -1;
}
}
int main()
{
int arr[] = { 5, 7, 8, 3, 2, 6, 9, 1, 4, 0 };
buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( int ), int_cmp);
for (int i = 0; i < 10; i++)
{
printf( "%d " , arr[i]);
}
printf( "\n" );
system( "pause" );
return 0;
}
如果排序字符串,程序如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sort.h>
int str_cmp(const void * str1 , const void * str2 )
{
return strcmp((char *)(*(int*) str1 ), (char *)(*(int*) str2 ));
}
int main()
{
char *arr[] = { "cccc" , "ffff", "bbbb" , "aaaa" };
buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( char *), int_cmp);
for (int i = 0; i < 4; i++)
{
printf( "%s " , arr[i]);
}
printf( "\n" );
system( "pause" );
return 0;
}
你也可以把他们放在一起运用,假如我放在一起运用排序整型字符串:
#include<stdio.h>
#include<stdlib.h>
int int_cmp(const void * p1 , const void * p2 )
{
if (*(int *)p1 > *( int *)p2 )
{
return 1;
}
if (*(int *)p1 == *( int *)p2 )
{
return 0;
}
else
{
return -1;
}
}
void swap(const void * p1 , const void * p2 ,int size)
{
int i = 0;
for (i = 0; i < size ; i++)
{
char temp = *((char *)p1 + i);
*(( char *)p1 + i) = *((char*) p2 + i);
*(( char *)p2 + i) = temp;
}
}
void buble(void *base, int count , int size, int (*compare )(const void *, const void *))
{
int i = 0;
int j = 0;
for (i = 0; i < count ; i++)
{
for (j = 0; j < count - i - 1; j++)
{
if (compare (((char*) base + size *j), ((char*) base + size *(j + 1)))>0)
{
swap((( char *)base + size*j), (( char *)base + size *(j + 1)), size );
}
}
}
}
int main()
{
int arr[] = { 5, 7, 8, 3, 2, 6, 9, 1, 4, 0 };
buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( int ), int_cmp);
for (int i = 0; i < 10; i++)
{
printf( "%d " , arr[i]);
}
printf( "\n" );
system( "pause" );
return 0;
}
如果排序字符串,代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int str_cmp(const void * str1 , const void * str2 )
{
return strcmp((char *)(*(int*) str1 ), (char *)(*(int*) str2 ));
}
void swap(const void * p1 , const void * p2 ,int size)
{
int i = 0;
for (i = 0; i < size ; i++)
{
char temp = *((char *)p1 + i);
*(( char *)p1 + i) = *((char*) p2 + i);
*(( char *)p2 + i) = temp;
}
}
void buble(void *base, int count , int size, int (*compare )(const void *, const void *))
{
int i = 0;
int j = 0;
for (i = 0; i < count ; i++)
{
for (j = 0; j < count - i - 1; j++)
{
if (compare (((char*) base + size *j), ((char*) base + size *(j + 1)))>0)
{
swap((( char *)base + size*j), (( char *)base + size *(j + 1)), size );
}
}
}
}
int main()
{
char *arr[] = { "cccc" , "ffff", "bbbb" , "aaaa" };
buble(arr, sizeof (arr) / sizeof (arr[0]), sizeof( char *), int_cmp);
for (int i = 0; i < 4; i++)
{
printf( "%s " , arr[i]);
}
printf( "\n" );
system( "pause" );
return 0;
}
当然我还是建议大家把代码分开写,这样看起来简洁明了,逻辑性强,让别人能很快看明白,希望你们能养成这样的好习惯。
转载于:https://blog.51cto.com/mnt3918290/1717831