三大排序算法...bubble,quick,shell(冒泡算法,快速排序算法,希尔算法)
来源:互联网 发布:淘宝店铺导航在线制作 编辑:程序博客网 时间:2024/05/19 10:13
#include<string.h>
#include<malloc.h>
//冒泡算法
void BubbleSort(char *pChar, const int len)
{
char temp;
for(int i=0; i<len; ++i)
{
for(int j=i+1; j<len; ++j)
{
if( *(pChar+i) > *(pChar+j) )
{
temp = *(pChar+i);
*(pChar+i) = *(pChar+j);
*(pChar+j) = temp;
}
}
}
return;
}
//划分区间,选取一个数为基准点,对其进行区间划分,前半区间小于它,后半区间大于它,记录基准点最终位置,返回其值
int Partition(char *pChar, int m, int n)
{
// char pivot = *pChar;
int PrePos = m;
int BackPos = n;
int PivotPos = m;
char temp;
while(PrePos<BackPos)
{
for(;PrePos<BackPos;BackPos--) //后半区间遍历,找到后半区间比它小的,置换位置,把后半区间的值放入前半区间
{
if(*(pChar+BackPos) < *(pChar+PrePos))
{
temp = *(pChar+BackPos);
*(pChar+BackPos) = *(pChar+PrePos);
*(pChar+PrePos) = temp;
break;
}
}
for(;PrePos<BackPos;PrePos++) //前半区间遍历,找到前半区间比它大的,置换位置,把前半区间的值放入后半区间
{
if(*(pChar+PrePos) > *(pChar+BackPos))
{
temp = *(pChar+BackPos);
*(pChar+BackPos) = *(pChar+PrePos);
*(pChar+PrePos) = temp;
break;
}
}
}
PivotPos=PrePos;
return PivotPos;
}
//快速排序算法
//1.划分区间 2.递归
void QuickSort(char *pChar, int m, int n)
{
int PivotPos = m;
if(m<n) //递归,直到区间的间距小于等于1
{
PivotPos = Partition(pChar, m, n);
QuickSort(pChar, m, PivotPos-1);
QuickSort(pChar, PivotPos+1, n);
}
return;
}
//shell插入
static void ShellInsert(char *pChar, const int dis, const int len)
{
int PrePos = 0;
int CurPos = 0;
char tmp;
for(int i=dis; i<len; i++)
{
PrePos = i - dis;
CurPos = i;
tmp = *(pChar+CurPos);
while((PrePos >= 0))
{
if(*(pChar+PrePos) > tmp)
{
*(pChar+CurPos) = *(pChar+PrePos);
CurPos = PrePos;
}
PrePos = PrePos - dis;
}
*(pChar+CurPos) = tmp;
}
return;
}
//shell排序算法,选取间距dis,字符串中每间隔dis的值为一组,分组进行排序
void ShellSort(char *pChar, const int len)
{
int dis = len/2;
while(dis > 0)
{
ShellInsert(pChar, dis, len);
dis = dis/2;
}
return;
}
void main()
{
char list[100];
char temp;
int i = 0,len = 0;
char *pCList = NULL;
printf("input charaters!\n");
while((temp = getchar()) != '\n')
{
list[i]=temp;
i++;
}
list[i]='\0';
len=strlen(list);
pCList = (char*)malloc(sizeof(char)*len);
for(int n=0; n<len; ++n)
{
*(pCList+n)=list[n];
}
// BubbleSort(pCList,len);
// QuickSort(pCList,0,len-1);
ShellSort(pCList,len);
return;
}
- 三大排序算法...bubble,quick,shell(冒泡算法,快速排序算法,希尔算法)
- 三大排序算法(Bubble/Quick/Shell)冒泡、快排、希尔......
- 快速quick、冒泡(bubble),希尔(shell)排序算法记录
- 冒泡(bubble)排序算法
- 排序算法---冒泡排序(Bubble Sort)
- 算法--冒泡排序 Bubble Sort
- 冒泡、插入、希尔和快速排序算法
- 快速(quick)排序算法
- 冒泡排序算法(Bubble Sort):
- 冒泡排序算法(Bubble Sort)
- 希尔(shell)排序算法
- 排序算法,快速排序,希尔排序,冒泡排序
- C#排序算法(一)冒泡排序(Bubble)
- 经典排序算法 - 冒泡排序Bubble sort
- 经典排序算法 - 冒泡排序Bubble sort
- 经典排序算法 - 冒泡排序Bubble sort
- 经典排序算法 - 冒泡排序Bubble sort
- 经典排序算法 - 冒泡排序Bubble sort
- CSDN博文精选:Android系列开发博客资源汇总
- 《算法导论》第19章二项堆的实现源代码
- ExecutorService线程池
- poj 2407(欧拉函数)
- ERROR: Power Handler function yield to low priority thread. 解决方法
- 三大排序算法...bubble,quick,shell(冒泡算法,快速排序算法,希尔算法)
- 动态链接库全面浅析(一)-----Win32 动态链接库
- 工作流的基本概念
- 笔记本LCD与LED的区别
- js parseFloat 浮点数求和 精确位数
- 子衿的事(46)
- oracle的索引使用注意
- CSS选择器
- 曼彻斯特编码