//快速排序的经典实现(重点)
void quick_sort(int *parr, int size)
{
int base = *parr, tmp = 0;
int *start = parr, *end = parr + size - 1;
if(size <= 1){ //递归结束条件
return;
}
while(start < end){ //将比base小的数移到base前面,将比base大的数移到base的后面
if(*start > *end){
tmp = *start;
*start = *end;
*end = tmp;
}
if(base == *start){
end--;
}
else{
start++;
}
}
quick_sort(parr, start - parr); //将base前的数进行递归
quick_sort(start + 1, size - (start - parr) - 1); //将base后的数进行递归
}
//冒泡排序
void bubble_sort(int *parr, int size)
{
int i = 0, j = 0;
int tmp = 0;
for(i = size - 1; i >= 1; --i){
//每次循环把剩余的最大数字放在下标为循环变量i的存储区里
for(j = 1; j <= i; ++j){
//每次循环把下标为j-1和j的两个存储区内容做调整
if(*(parr + j - 1) > *(parr + j)){
tmp = *(parr + j - 1);
*(parr + j - 1) = *(parr + j);
*(parr + j) = tmp;
}
}
}
}
//附选择排序
void choice_sort(int *parr, int size)
{
int i, j, tmp = 0;
for(i = size - 1; i >= 1; --i){
//每次把剩余数字里的最大数字放在下标为循环变量i的存储区里
for(j = 0; j <= i - 1; ++j){
//每次循环把下标为i和j的存储区内容做调整
if(*(parr + j) > *(parr + i)){
tmp = *(parr + i);
*(parr + i) = *(parr + j);
*(parr + j) = tmp;
}
}
}
}
//附插入排序
void insert_sort(int *parr, int size)
{
int i, j, tmp = 0;
for(i = 1; i <= size - 1; ++i){
//每次循环把下标为i的存储区内容插入到前面的数字中合适的位置里
for(j = i - 1; j >= 0; --j){
//每次循环把下标为j和j+1的存储区内容做调整
if(*(parr + j) > *(parr + j + 1)){
tmp = *(parr + j);
*(parr + j) = *(parr + j + 1);
*(parr + j + 1) = tmp;
}
else{
break;
}
}
}
}