插入排序和快速排序,利用递归的思想,有点不好理解,需要通过画图结合着看
//插入排序
void insert_sort(int *arr,int n) //arr为传入的数组,n为数组长度
{
int i,j;
for(i = 1;i < n;i++)
{
int temp = arr[i]; //将待排序的数进行备份
for(j = i-1;arr[j] >= temp && j >= 0;j--) //如果退出循环,说明前面的已经有序
{
//将元素后移
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
printf("排序成功\n");
}
//快速排序
int part(int *arr,int low,int high)
{
int X = arr[low]; //以第一个元素为基准值
while(low < high) //让循环继续的条件
{
while(arr[high] >= X && high > low) //为了不错位
{
high--;
}
arr[low] = arr[high]; //把小的值往前放
while(arr[low] <= X && high > low)
{
low++;
}
arr[high] = arr[low]; //把大的值往后放
arr[low] = X; //把基准值放入指定位置
return low; //返回基准值的下标
}
}
void quick_sort(int *arr,int low,int high)
{
if(low >= high)
{
return; //只有一个数,无需排序,递归出口
}
//先进行一趟排序
int mid part(arr,low,high);
//对左半部分快排
quick_sort(arr,low,mid-1);
//对右半部分快排
quick_sort(arr,mid+1,high);
}