快速排序代码实现的原理主要是调用递归,将问题细分解决。然后就是注意处理边界问题。
代码
-
#include <stdio.h>
-
-
-
int buff10[10] = {4,0,2,8,9,5,7,3,6,1};
-
int buff20[20] = {8,6,7,1,4,9,2,0,3,5,14,19,11,17,12,13,10,18,15,16};
-
-
void show(int *data,int size);
-
-
/******************************************************
-
快速排序
-
******************************************************/
-
void quickSort(int *data ,int a,int b)
-
{
-
int i,j,temp;
-
-
if (a>=b ) { //边界检测
-
return ;
-
}
-
i = a;
-
j = b;
-
temp = data[a];
-
-
// if(i>=j)return ;
-
-
while ( i < j ) {
-
-
//从右向左
-
while (i<j) {
-
-
if (data[j] <= temp) {
-
data[i] = data[j];
-
data[j] = temp;
-
break;
-
}
-
j--;
-
}
-
show(data,10);
-
//从左向右
-
while (i<j) {
-
-
if (data[i] >= temp) {
-
data[j] = data[i];
-
data[i] = temp;
-
break;
-
}
-
i++;
-
}
-
show(data,10);
-
-
}
-
-
quickSort(data,a,i-1); //递归处理子部分 左半边
-
quickSort(data,i+1,b); //右半边
-
-
-
-
}
-
-
-
-
int main()
-
{
-
int i;
-
show(buff10,10);
-
quickSort(buff10,0,10-1);
-
-
/* printf("buff10: ");
-
for (i=0;i<10;i++) {
-
printf("%d ",buff10[i]);
-
}
-
printf("\n");
-
-
quickSort(buff20,0,20-1);
-
printf("buff20: ");
-
for (i=0;i<20;i++) {
-
printf("%d ",buff20[i]);
-
}
-
printf("\n");
-
*/
-
return 0;
-
}
-
-
-
void show(int *data,int size)
-
{
-
int i;
-
printf("data: ");
-
for (i=0;i<size;i++) {
-
printf("%d ",data[i]);
-
}
-
printf("\n");
-
}
运行结果:
data: 4 0 2 8 9 5 7 3 6 1
data: 1 0 2 8 9 5 7 3 6 4
data: 1 0 2 4 9 5 7 3 6 8
data: 1 0 2 3 9 5 7 4 6 8
data: 1 0 2 3 4 5 7 9 6 8
data: 1 0 2 3 4 5 7 9 6 8
data: 1 0 2 3 4 5 7 9 6 8
-------------------------
data: 0 1 2 3 4 5 7 9 6 8
data: 0 1 2 3 4 5 7 9 6 8
-------------------------
data: 0 1 2 3 4 5 7 9 6 8
data: 0 1 2 3 4 5 7 9 6 8
-------------------------
data: 0 1 2 3 4 5 7 9 6 8
data: 0 1 2 3 4 5 7 9 6 8
-------------------------
data: 0 1 2 3 4 5 6 9 7 8
data: 0 1 2 3 4 5 6 7 9 8
data: 0 1 2 3 4 5 6 7 9 8
data: 0 1 2 3 4 5 6 7 9 8
-------------------------
data: 0 1 2 3 4 5 6 7 8 9
data: 0 1 2 3 4 5 6 7 8 9
-------------------------
阅读(1319) | 评论(0) | 转发(0) |