//快速排序(元素用线性表存储)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define InitiaSize 10
//定义动态线性表
typedef struct{
int* data; //数据域
int len; //线性表当前长度
int MaxSize; //线性表最大容量
}SqList;
//初始化并对线性表随机赋值
bool InitiaList(SqList &L){
int len;
printf("请输入你想要的线性表的长度:");
scanf("%d",&len);
while(len < 0){
printf("您输入的长度不规范,请重新输入!\n");
scanf("%d",&len);
}
if(len <= InitiaSize){
L.data = (int*)malloc(sizeof(int)*InitiaSize);
L.len = len;
L.MaxSize = InitiaSize;
}
else{
L.data = (int*)malloc(sizeof(int)*len);
L.len = len;
L.MaxSize = len;
}
printf("线性表初始化完毕!当前长度是%d,最大容量是%d\n",L.len,L.MaxSize);
int i;
printf("接下来对线性表进行随机赋值:\n");
srand(time(NULL));
for(i = 0; i < L.len; i++){
L.data[i] = rand()%100;
}
printf("随机赋值操作执行完毕!\n");
return true;
}
//读取线性表的内容
void PrintList(SqList &L){
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行读取操作!\n");
return;
}
int i;
for(i = 0; i < L.len; i++){
if(i == L.len - 1){
printf("%d\n",L.data[i]);
}
else{
printf("%d ",L.data[i]);
}
}
printf("线性表内容读取完毕!该线性表长度是%d,最大容量是%d。\n",L.len,L.MaxSize);
}
//快速排序
int Pviot(SqList &L, int l, int r){
int min;
min = L.data[l]; //默认设置首个元素先进行比较
while(l < r){
while((l < r)&&(L.data[r] >= min)){r--;} //从右边进行遍历,若元素不比min小则r--
L.data[l] = L.data[r];
while((l < r)&&(L.data[l] <= min)){l++;} //从左边进行遍历,若元素不比min大则l++
L.data[r] = L.data[l];
}
L.data[l] = min; //当l == r时,将min赋给该位置
return l; //返回该位置的下标
}
void QuickSort(SqList &L, int l, int r){
if((L.len == 0)||(L.MaxSize == 0)){
printf("此线性表为空,无法进行快速排序!\n");
return;
}
if(l < r){
int p;
p = Pviot(L, l, r);
QuickSort(L, l, p - 1); //对左半部分进行快排
QuickSort(L, p + 1, r); //对右半部分进行快排
}
}
int main(){
SqList L; //定义一个线性表
InitiaList(L); //对线性表进行初始化并随机赋值
//PrintList(L); //输出线性表内容
clock_t T; //对选择排序所花费的时间进行记录
printf("即将进行快速排序!\n");
T = clock();
//SelectSort(L); //进行选择排序
//BubbleSort(L); //进行冒泡排序
QuickSort(L, 0, L.len - 1); //进行快速排序
T = clock();
printf("快速排序执行完毕!\n");
printf("此次选择排序花费了%lf s\n",((float)T)/CLOCKS_PER_SEC);
//PrintList(L); //输出线性表内容
return 0;
}
//上述代码如有错误还请大家在评论区指正!!!谢谢!
快速排序(C语言版)
最新推荐文章于 2024-09-13 14:29:03 发布