1.遍历输出
void printArray(int array[],int length)
{/*参数一:数组
参数二:数组长度*/
int i;
for(i=0;i<length;i++)
{
printf("%d ",array[i]);
}
printf("\n");
}
2.一趟排序操作
int partition(int array[],int i,int j)
{/*参数一:数组
参数二:需要操作的第一个位置下标
参数三:需要操作的最后一个位置下标*/
int x = array[i];//首元素作为基准元素
while(i<j)
{/*外层循环,当i和j相等时,说明已经遍历一轮,
此时基准元素左边的都小,基准元素右边的都大*/
while(i<j&&array[j]>x)//从右往左找第一个小于基准元素的元素下标
j--;
if(i<j)
{
array[i] = array[j];//将该元素放置到i元素位置
i++;
}
while(i<j&&array[i]<x)//从左往右找第一个大于基准元素的元素下标
i++;
if(i<j)
{
array[j] = array[i];//将该元素放置到j元素位置
j--;
}
}
array[i] = x;//将基准元素放置到中间位置(i)
return i;//返回基准元素的位置下标
}
3.总排序操作
void quickSort(int array[],int i,int j)
{/*参数一:数组
参数二:起始元素下标
参数三:结束元素下标*/
static int count = 1;
if(i<j)
{
int index = partition(array,i,j);//找基准元素的位置下标
printf("第%d轮:",count);
count++;
printArray(array,8);
quickSort(array,i,index-1);//递归,排序左边数组
quickSort(array,index+1,j);//递归,排序右边数组
}
}
4.主函数
int main()
{
int array[8] = {27,38,13,49,76,97,65,49};
quickSort(array,0,7);
return 0;
}
5.完整代码:
#include <stdio.h>
#include <stdlib.h>
/*遍历输出*/
void printArray(int array[],int length)
{/*参数一:数组
参数二:数组长度*/
int i;
for(i=0;i<length;i++)
{
printf("%d ",array[i]);
}
printf("\n");
}
/*一趟排序操作*/
int partition(int array[],int i,int j)
{/*参数一:数组
参数二:需要操作的第一个位置下标
参数三:需要操作的最后一个位置下标*/
int x = array[i];//首元素作为基准元素
while(i<j)
{/*外层循环,当i和j相等时,说明已经遍历一轮,
此时基准元素左边的都小,基准元素右边的都大*/
while(i<j&&array[j]>x)//从右往左找第一个小于基准元素的元素下标
j--;
if(i<j)
{
array[i] = array[j];//将该元素放置到i元素位置
i++;
}
while(i<j&&array[i]<x)//从左往右找第一个大于基准元素的元素下标
i++;
if(i<j)
{
array[j] = array[i];//将该元素放置到j元素位置
j--;
}
}
array[i] = x;//将基准元素放置到中间位置(i)
return i;//返回基准元素的位置下标
}
/*总排序操作*/
void quickSort(int array[],int i,int j)
{/*参数一:数组
参数二:起始元素下标
参数三:结束元素下标*/
static int count = 1;
if(i<j)
{
int index = partition(array,i,j);//找基准元素的位置下标
printf("第%d轮:",count);
count++;
printArray(array,8);
quickSort(array,i,index-1);//递归,排序左边数组
quickSort(array,index+1,j);//递归,排序右边数组
}
}
int main()
{
int array[8] = {27,38,13,49,76,97,65,49};
quickSort(array,0,7);
return 0;
}
6.运行结果: