/*
* 此程序用于实现快速排序
* 作者:zhy
* 时间:2021/7/21
*/
#include <stdio.h>
#include <stdlib.h>
// 递归实现主函数
// 参数:left 左标 right 右标
// 参数:arr 排序数组首地址
void quicksort(int *arr,int left,int right);
int main(int argc,char *argv[])
{
int arr[]={44,3,38,5,47,15,36,26,27,2,46,4,19,50,48};
int len=sizeof(arr)/sizeof(int);
int yy; for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
quicksort(arr,0,len - 1); // 调用插入排序函数对数组排序。
// 显示排序结果。
for (yy=0;yy<len;yy++) printf("%2d ",arr[yy]); printf("\n");
return 0;
}
void quicksort(int *arr,int left,int right)
{
if ( left >= right ) return;
int flag = 0; // 0 为向左移动右标,1 为向右移动左标
int left1 = left;
int right1 = right;
int temp = arr[left]; // 排序元素暂存
while( left != right )
{
if (!flag){
if (arr[right] < temp)
{
arr[left] = arr[right];
flag = 1;
left++;
}
else right--;
}else{
if (arr[left] > temp)
{
arr[right] = arr[left];
flag = 0;
right--;
}
else left++;
}
}
arr[left] = temp;
int yy; for (yy=0;yy<15;yy++) printf("%2d ",arr[yy]); printf("\n");
quicksort(arr,left1,left - 1);
quicksort(arr,right + 1,right1);
}
实现快速排序
最新推荐文章于 2024-07-13 15:11:03 发布