#include <stdio.h>
#include <string.h>
typedef unsigned int UINT32;
typedef unsigned char UINT8;
typedef UINT8 (*HANDLERFUNC)(int arr[],UINT32 len);
typedef struct
{
char name[20];
HANDLERFUNC funcname;
}Sort_Typedef;
void Traverse(int arr[],UINT32 len);
UINT8 SelectionSort(int arr[],UINT32 len);
UINT8 BubbleSort(int arr[],UINT32 len);
UINT8 InsertionSort(int arr[],UINT32 len);
UINT8 QuickSort(int arr[],UINT32 len);
Sort_Typedef method[] =
{
{“SelectionSort”, SelectionSort},
{“BubbleSort”, BubbleSort},
{“InsertionSort”, InsertionSort},
{“QuickSort”, QuickSort},
};
int main()
{
int i = 0;
int arr[10] = {1,5,3,11,23,10,4,9,0,2};
UINT32 len = sizeof(arr)/sizeof(arr[0]);
printf(“排序前的顺序为:\n”);
Traverse(arr,len);
char fname[20] = "BubbleSort";
for(i=0;i<sizeof(method)/sizeof(Sort_Typedef);i++)
{
if(0 == strcmp(fname,method[i].name))
{
if(0 != method[i].funcname(arr,len))
{
printf("sort fail ");
}
}
}
return 0;
}
UINT8 QuickSort(int arr[],UINT32 len)
{
UINT32 i = 0;
UINT32 j = len;
int value = 0;
int left = 0;
int right = 0;
UINT32 half = 0 ;
//printf("QuickSort\n");
if(0 >= len)
{
printf("0 >= len\n");
return 1;
}
if(len == 1)
{
return 0 ;
}
if(len == 2)
{
if(arr[0]>arr[1])
{
arr[0] = arr[0] ^ arr[1];
arr[1] = arr[0] ^ arr[1];
arr[0] = arr[0] ^ arr[1];
}
return 0 ;
}
value = arr[0];
i = 1;
j = len-1;
while(i <= j)
{
if(value > arr[j])
{
if(value < arr[i])
{
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
else
{
i++;
}
}
else
{
j--;
}
}
int temp = arr[j];
arr[j] = arr[0];
arr[0] = temp;
//printf("%d\n",i);
QuickSort((arr),j+1) ;
QuickSort((arr+(j+1)),len-(j+1));
printf("排序后的顺序为:\n");
Traverse(arr,len);
return 0;
}
UINT8 SelectionSort(int arr[],UINT32 len)
{
UINT32 i = 0;
UINT32 j = 0;
UINT32 index = 0;
int minvalue = 0;
printf("selectionSort\n");
if(0 >= len)
{
printf("0 >= len\n");
return 1;
}
for(i = 0 ;i<len-1;i++)
{
minvalue = arr[i];
for(j = i+1; j<len;j++)
{
if(minvalue > arr[j])
{
minvalue = arr[j];
index = j;
}
}
if(i != j)
{
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
printf("排序后的顺序为:\n");
Traverse(arr,len);
return 0;
}
UINT8 BubbleSort(int arr[],UINT32 len)
{
UINT32 i = 0;
UINT32 j = 0;
int max = 0;
printf("BubbleSort\n");
if(0 >= len)
{
printf("0 >= len\n");
return 1;
}
for(i = 0 ;i<len;i++)
{
for(j = 0; j<len-i-1;j++)
{
if(arr[j] > arr[j+1])
{
arr[j] = arr[j] ^ arr[j+1];
arr[j+1] = arr[j] ^ arr[j+1];
arr[j] = arr[j] ^ arr[j+1];
}
}
}
printf("排序后的顺序为:\n");
Traverse(arr,len);
return 0;
}
UINT8 InsertionSort(int arr[],UINT32 len)
{
UINT32 i = 0;
UINT32 j = 0;
int value = 0;
printf("InsertionSort\n");
if(0 >= len)
{
printf("0 >= len\n");
return 1;
}
for(i = 0 ;i<len-1;i++)
{
value = arr[i+1];
for(j = i; j>=0 ;j--)
{
if(arr[j] >value)
{
arr[j+1] = arr[j] ;
continue;
}
arr[j+1] = value;
break;
}
}
printf("排序后的顺序为:\n");
Traverse(arr,len);
return 0;
}
void Traverse(int arr[],UINT32 len)
{
UINT32 i = 0;
for(i = 0 ; i < len ; i++)
{
if(i != (len-1))
{
printf("%d,",arr[i]);
}
else
{
printf("%d\n",arr[i]);
}
}
return;
}