/*----------------------------------------------------------------------------------------
Program Explain:快速排序
Create Date:2018.2.10 by lzn
----------------------------------------------------------------------------------------*/
#include <stdio.h>
//函数声明
void swap(int array[], int i, int j);
void QuickSort(int array[], int left, int right);
void PrintfArray(int array[], int len);
/*********************************************************************************
* Function Name : main主函数
* Parameter : NULL
* Return Value : 0
* Function Explain :
* Create Date : 2018.2.10
**********************************************************************************/
int main(void)
{
int array[] = {6,2,55,100,33,23,999,888,88};
int len = sizeof(array)/sizeof(int);
printf("Original array:");
PrintfArray(array, len);
QuickSort(array, 0, len-1);
printf("QuickSort array:");
PrintfArray(array, len);
return 0;
}
/*********************************************************************************
* Function Name : swap,数组内元素交换
* Parameter : array:数组 i,j:数组下标
* Return Value : 0
* Function Explain :
* Create Date : 2018.2.10
**********************************************************************************/
void swap(int array[], int i, int j)
{
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
/*********************************************************************************
* Function Name : QuickSort,快速排序
* Parameter : array:数组 len:数组长度
* Return Value : 0
* Function Explain :
* Create Date : 2018.2.10
**********************************************************************************/
void QuickSort(int array[], int left, int right)
{
if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
{
return ;
}
int i = left;
int j = right;
int key = array[left]; //选择数组第一个元素作为关键数据(枢轴),划分成两个字序列
while(i < j) /*控制在当组内寻找一遍*/
{
/* 升序 */
while(i < j && key <= array[j]) //把大于key的数据都移到key的右边
{
j--; //向前寻找
}
swap(array, i, j); //“碰头”
while(i < j && key >= array[i]) //把小于key的数据都移到key的左边
{
i++; //向后寻找
}
swap(array, j, i); //“碰头”
}
array[i] = key; //当在当组内找完一遍以后就把中间数key回归
QuickSort(array, left, i-1); //对子序列1(关键数据key左边的序列)进行同样的操作
QuickSort(array, i+1, right);//对子序列2(关键数据key右边的序列)进行同样的操作
}
/*********************************************************************************
* Function Name : PrintfArray,打印一个数组
* Parameter : array:数组 len:数组长度
* Return Value : 0
* Function Explain :
* Create Date : 2018.2.10
**********************************************************************************/
void PrintfArray(int array[], int len)
{
for(int i = 0; i < len; i++)
{
printf("%d ",array[i]);
}
printf("\n");
}
程序运行结果如下:
1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!