1。
练习使用qsort函数排序各种类型的数据。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning (disable:4996)
int cmp(const void *p1, const void *p2)
//不同的类型需改变cmp函数中的强转返回类型
{
return (*(char *)p1 > *(char *)p2);
}
void swap (void *ptr1,void *ptr2,int size)
//交换函数不需要改变
{
int i = 0;
for(i = 0;i<size;i++)
{
char tmp = *((char *)ptr1 + i);
*((char *)ptr1 + i) = *((char *)ptr2 + i);
*((char *)ptr2 + i) = tmp;
}
}
void bubble_sort (void *str , int count ,int size ,int (*cmp)(void *,void *))
//排序不同类型的数据 该函数不需要改变
{
int i = 0;
int j = 0;
int flag = 1;
for(i=0;i< count-1 ;i++)
{
flag = 1;
for(j=0;j<count-i-1;j++)
{
if( cmp ((char *)str + j*size ,(char*)str +(j+1)*size)> 0)
{
flag = 0;
swap ((char *)str + j*size ,(char*)str +(j+1)*size , size);
}
}
if(flag)
{
return ;
}
}
return ;
}
int main()
{
char arr[][5] = {"aaaa","gggg","cccc","hhhh","bbbb"};
//char arr[] = {'d','c','f','a','b'};
//int arr[] = {1,4,2,6,3,5,7};
int i = 0;
int len = sizeof(arr) / sizeof (arr[0]);
bubble_sort(arr, len, sizeof(char[5]), cmp);//数据类型 要改
for(i;i<len;i++)
{
printf("%s ",arr[i]); //改变数据类型 则要改变输出方式
}
printf("\n");
return 0;
}
2。
写冒泡排序可以排序多个字符串。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning (disable:4996)
void bubble_sort (char str[][6] , int len)
{
int i=0;
int j=0;
int flag = 1;
char arr[6]; // 拷贝空间应多给,要拷贝'\0'
for(i=0;i<len-1;i++)
{
flag = 1;
for(j=0;j<len-i-1;j++)
{
if(strcmp(str[j],str[j+1]) > 0)
{
flag = 0;
strcpy(arr,str[j]);
strcpy(str[j],str[j+1]);
strcpy(str[j+1],arr);
}
}
if(flag)
{
return ;
}
}
return ;
}
int main()
{
char str[][6]= {
"ggggg",
"aaaaa",
"bbbbb",
"ppppp",
"hhhhh",
};
int len = (sizeof(str) / sizeof(str[0]));
bubble_sort (str,len);
return 0;
}