快速排序原理
快速排序的应用原理是:假定第一个元素为基准点,经过比较只够将数据中比基准元素大的放到基准元素右边,小的放到左边,按照这个方法推导直至数据有序。
其实不难发现,这样的操作方法有递归的特性。
实现代码
建立顺序表用来存储数据
qsort.h
#ifndef _QSORT_H_
#define _QSORT_H_
typedef int data_t;
typedef struct{ //建立的顺序表
data_t *data;
int maxlen;
}lin,*linlist;
linlist lin_creart(int len); //创建顺序表函数
data_t lin_point(linlist L,int low,int high); //找基准点,即中点
int lin_qsort(linlist L,int low,int high); //快速排序实现函数
#endif
qsort.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"qsort.h"
linlist lin_creart(int len){
linlist L;
L = (linlist)malloc(sizeof(lin));
if(L == NULL){
printf("lin creart failed\n");
return NULL;
}
L->maxlen = len;
L->data = (data_t *)malloc(L->maxlen * sizeof(data_t));
if(L->data == NULL){
printf("data is NULL\n");
return NULL;
}
memset(L->data,0,sizeof(data_t));
return L;
}
data_t lin_point(linlist L,int low,int high){
int temp = L->data[low];
while(low < high){
while(low < high && temp <= L->data[high]){
high--;
}
L->data[low] = L->data[high];
while(low < high && temp >= L->data[low]){
low++;
}
L->data[high] = L->data[low];
}
L->data[low] = temp;
return low;
}
int lin_qsort(linlist L,int low,int high){
int point;
if(low >= high){
return 0;
}
point = lin_point(L,low,high);
lin_qsort(L,low,point - 1);
lin_qsort(L,point + 1,high);
}
main.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"qsort.h"
int main(){
linlist L;
L = lin_creart(10);
srandom(10); //生成随机数
int i;
for(i = 0;i<10;i++){
L->data[i] = random() % 100; //生成的随机数对100取余得到0-99的数字
}
for(i = 0;i<10;i++){
printf("%d,",L->data[i]);
}
puts("");
lin_qsort(L,0,L->maxlen - 1);
for(i = 0;i<10;i++){
printf("%d,",L->data[i]);
}
puts("");
return 0;
}
运行结果
95,8,78,25,18,77,75,71,47,7,
7,8,18,25,47,71,75,77,78,95,
其他方法
stdlib.h中是由快速排序的函数的,可直调用qsort();