程序代码:

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;

}

当然我还是建议大家把代码分开写,这样看起来简洁明了,逻辑性强,让别人能很快看明白,希望你们能养成这样的好习惯。