最近看数据结构,把常用的排序算法用C语言写了一下。
没有按数据结构上的定义SqList结构体,只是用数组的形式实现。
有的算法并没有完全按书上给出的算法,但思路一致。
#include
void InsertSort(int[], int); //直接插入排序 无哨兵
void BInsertSort(int[], int); //折半插入排序
void BubbleSort(int[], int); //起泡排序
void QSort(int[], int, int); //快速排序
void SelectSort(int[], int); //简单选择排序
int main(){
//int num[] = {12,23,21,23,123,21,2,221,12,44};
int num[] = {4,3,6,7,2,13,21,9,8,34};
//int num[] = {38,65,97,76,13,27,49}; //快排使用
int i;
int len = 10;
//InsertSort(num, len);
//BInsertSort(num, len);
//BubbleSort(num, len);
//len = 7;
//QSort(num, 0, len-1);
//SelectSort(num, len);
for(i=0; i0; j--)
{
if(temp < num[j-1]){
num[j] = num[j-1];
}else{
break;
}
}
num[j] = temp;
}
}
//折半插入排序
void BInsertSort(int num[], int len){
int i,j,temp,low,high,mid;
for(i=1; i= num[i-1]) continue;
temp = num[i];
low = 0;
high = i-1;
mid = (low + high)/2;
while(low <= high)
{
if(num[mid] > temp){
high = mid - 1;
}else
{
low = mid + 1;
}
mid = (low + high)/2;
}
//二分查找完成后,low会指向应插入的位置
for(j=i; j>=low; j--)
{
num[j] = num[j-1];
}
num[low] = temp;
}
}
//起泡排序
void BubbleSort(int num[], int len){
int i, j, temp;
int change = 1;
for(i=len; i>0; i--)
{
if(change == 0) break;
change = 0;
for(j=1; j num[j]){
temp = num[j-1];
num[j-1] = num[j];
num[j] = temp;
change = 1;
}
}
}
}
//快速排序
int Partition(int num[], int low, int high)
{ //一趟快排,返回枢轴位置
int temp = num[low];
while(low < high)
{
while(low= temp) --high;
num[low] = num[high];
while(low[minValueTag];
void SelectSort(int num[], int len){
int i, j, minValueTag, temp;
for(i=0; i
仅供参考,因个人水平及时间有限,文章的错误和不足之处还望指正。
参考文献:
《数据结构(C语言版)》 严蔚敏 吴伟民 著 清华大学出版社