快速排序
代码:
#include <stdio.h> #include <malloc.h> int T,t,N,i; #define LOG 1 //调试日志 void Log(int* data,int flag,int i,int j) { #ifdef LOG if(flag == 1) { for(int k=0;k<N;k++) { if(k==i || k==j) printf("* "); else printf(" "); } printf("\n"); } for(int k=0;k<N;k++) { printf("%d ",data[k]); } printf("\n"); #endif } void quickSort(int* data,int left, int right) { if(left > right) { return; } int i,j,temp1,temp2; temp1 = data[left]; i = left; j = right; while(i!=j) { while(data[j] >= temp1 && j>i) j--; while(data[i] <= temp1 && i<j) i++; //i与j交换 if(i<j) { temp2 = data[i]; data[i] = data[j]; data[j] = temp2; Log(data,1,i,j); } } //当i与j相遇,将该值与基准值交换 data[left] = data[i]; data[i] = temp1; Log(data,1,i,left); quickSort(data,left,i-1); quickSort(data,i+1,right); } /* *T:testcase number *N:array size *data */ int main() { //从文件input.txt读取测试数据,并输出到output.txt #ifdef WIN32 freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif scanf("%d",&T); for(t=1;t<=T;t++) { scanf("%d",&N); //动态分配内存 int *data; data = (int*)malloc(sizeof(int) * N); //读取数据 for(i=0;i<N;i++) { scanf("%d",&data[i]); } Log(data,0,0,0); quickSort(data,0,N-1); //打印程序运行结果 for(int k=0;k<N;k++) { printf("%d ",data[k]); } //释放动态分配的内存 free(data); data = NULL; } return 0; }
Input:
1 10 6 1 2 7 9 3 4 5 10 8
Output:
6 1 2 7 9 3 4 5 10 8 * * 6 1 2 5 9 3 4 7 10 8 * * 6 1 2 5 4 3 9 7 10 8 * * 3 1 2 5 4 6 9 7 10 8 * * 2 1 3 5 4 6 9 7 10 8 * * 1 2 3 5 4 6 9 7 10 8 * 1 2 3 5 4 6 9 7 10 8 * * 1 2 3 4 5 6 9 7 10 8 * 1 2 3 4 5 6 9 7 10 8 * * 1 2 3 4 5 6 9 7 8 10 * * 1 2 3 4 5 6 8 7 9 10 * * 1 2 3 4 5 6 7 8 9 10 * 1 2 3 4 5 6 7 8 9 10 * 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。