您的位置:首页 > 编程语言 > C语言/C++

[笔记]一道C语言面试题:实现快速排序

2011-09-08 01:48 477 查看
题目:输入整数数组List及数组长度n,对其进行快速排序

来源:某500强企业面试题目
思路:可参考这里的Flash动画,非常清晰明了

复杂度:时间复杂度O(n log(n))

//----------------------------------------
// 实现快速排序
// 参考Flash动画 http://www.jcc.jx.cn/xinwen3/news/kj/flash/2004/0426/1306.htm //----------------------------------------

int Partition(int List[], int L, int R){
int Pivot = List[L];          // 基准值取第一个

do{                           // 反复循环
while(List[R] >= Pivot){    // 从后向前找第一个比基准值小的
R--;                      // 没找到就左移
if (L == R){              // 判断L和R是否重合,如果重合,则退出
List[L] = Pivot;
return L;
}
}

List[L] = List[R];          // 取出R指向的数字,放入L中
L++;                        // L右移

if (L == R){                // 判断L和R是否重合,如果重合,则退出
List[L] = Pivot;
return L;
}

while (List[L] <= Pivot){   // 从前向后找第一个比基准值大的
L++;                      // 没找到就右移
if (L == R){              // 判断L和R是否重合,如果重合,则退出
List[L] = Pivot;
return L;
}
}

List[R] = List[L];          // 取出L指向的数字,放入R中
R--;                        // R左移

if (L == R){                // 判断L和R是否重合,如果重合,则退出
List[L] = Pivot;
return L;
}
}while(true);
}

void QuickSortList(int List[], int L, int R){
if (L >= R) return;

int p = Partition(List, L, R);
QuickSortList(List, L, p - 1);
QuickSortList(List, p + 1, R);
}

void QuickSort(int List[], int n){
QuickSortList(List, 0, n-1);
}

//----------------------------------------
// 测试快速排序
//----------------------------------------
void TestQuickSort(void){
int List[] = {3,5,1,3,2,5,0,1,8,4,11,7};
int n = 12;
int i;

printf("Before: ");
for (i = 0; i< n - 1; i++) printf("%d, ", List[i]);
printf("%d\n", List[n-1]);

printf("After: ");
QuickSort(List, n);
for (i = 0; i< n - 1; i++) printf("%d, ", List[i]);
printf("%d\n", List[n-1]);

}


Technorati 标签: C语言,面试题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: