C语言(5) - 选择排序 快速排序
2009-06-09 10:35
120 查看
/*
选择排序
找出最小的元素,与第一个元素对换
再在剩下的元素中找出最小的与第二个对换
*/
#include "getData.h"
void Selection(int *array)
{
int i=0;
while(i<ArraySize-1)
{
int minval = i;
int j ;
for(j=i+1;j<ArraySize;j++)
{
if(array[j]<array[minval])
{
minval = j;
}
}
if(minval != i)
{
int tmp = array[i];
array[i] = array[minval];
array[minval] = tmp;
}
i++;
}
}
/*
快速排序
选择一个枢轴,将枢轴两边的队列排序
递归此步骤,直到整个数列有序
*/
#include "getData.h"
int CountFlag = 0;
/*
从小到大排序
假设枢轴M,设置F指向低位,H指向高位
1。从高位开始扫描直到低位找出第一个小于枢轴的值和低位交换
2。从低位开始扫描直到高位找出第一个大于枢轴的值和高位交换
3。循环1,2直到有序
*/
int GetRan(int* array,int flow,int high)
{
int i=flow,j=high;
int ran;
int ranData;
//用随机数产生枢轴
srand((unsigned)time(NULL));
ran = flow+rand()%(high-flow+1);
ranData = array[ran];array[ran] = array[i];
/*
//用最低位数产生枢轴
ran = i;
ranData = array[ran];
*/
while(i<j)
{
while(j>i&&array[j]>ranData)j--;
array[i] = array[j];
while(i<j&&array[i]<ranData)i++;
array[j] = array[i];
}
array[j] = ranData;
return j;
}
void Quick(int* array,int low,int high)
{
int ran;
if(low<high)
{
ran = GetRan(array,low,high);
Quick(array,low,ran-1);
Quick(array,ran+1,high);
CountFlag++;
}
}
选择排序
找出最小的元素,与第一个元素对换
再在剩下的元素中找出最小的与第二个对换
*/
#include "getData.h"
void Selection(int *array)
{
int i=0;
while(i<ArraySize-1)
{
int minval = i;
int j ;
for(j=i+1;j<ArraySize;j++)
{
if(array[j]<array[minval])
{
minval = j;
}
}
if(minval != i)
{
int tmp = array[i];
array[i] = array[minval];
array[minval] = tmp;
}
i++;
}
}
/*
快速排序
选择一个枢轴,将枢轴两边的队列排序
递归此步骤,直到整个数列有序
*/
#include "getData.h"
int CountFlag = 0;
/*
从小到大排序
假设枢轴M,设置F指向低位,H指向高位
1。从高位开始扫描直到低位找出第一个小于枢轴的值和低位交换
2。从低位开始扫描直到高位找出第一个大于枢轴的值和高位交换
3。循环1,2直到有序
*/
int GetRan(int* array,int flow,int high)
{
int i=flow,j=high;
int ran;
int ranData;
//用随机数产生枢轴
srand((unsigned)time(NULL));
ran = flow+rand()%(high-flow+1);
ranData = array[ran];array[ran] = array[i];
/*
//用最低位数产生枢轴
ran = i;
ranData = array[ran];
*/
while(i<j)
{
while(j>i&&array[j]>ranData)j--;
array[i] = array[j];
while(i<j&&array[i]<ranData)i++;
array[j] = array[i];
}
array[j] = ranData;
return j;
}
void Quick(int* array,int low,int high)
{
int ran;
if(low<high)
{
ran = GetRan(array,low,high);
Quick(array,low,ran-1);
Quick(array,ran+1,high);
CountFlag++;
}
}
相关文章推荐
- C语言 冒泡排序 快速排序 直接插入排序 选择排序
- C语言常用排序——直接插入,冒泡,选择,希尔,快速,堆排序
- C语言排序实例(选择、冒泡、插入、折半、快速)
- 几种基本的排序算法(选择排序,冒泡排序,快速排序,归并排序,希尔排序)C语言实现
- C语言之桶排序,冒泡排序,快速排序,选择排序算法学习
- C语言使用链表的插入排序、选择排序、快速排序
- c语言排序之冒泡排序,选择排序,插入排序,快速排序总结
- C语言:冒泡排序、选择排序、快速排序、插入排序、“shell”法
- C语言:数组排序(插入排序、选择排序、泡排序、谢尔排序、快速排序、堆排序)
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 冒泡排序,插入排序,选择排序和快速排序-C语言
- c语言中的几种排序算法——冒泡排序、快速排序、插入排序、选择排序
- C语言排序(冒泡,选择,插入,归并,快速)
- C语言分别实现冒泡排序、快速排序、选择排序
- c语言排序实例(选择、冒泡、插入、折半、快速)
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- (数据结构排序的实验四)快速,冒泡,简单选择,直接插入排序的c语言实现!!
- 【小镇的技术天梯】C语言,冒泡、快速、希尔、选择排序
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 简单的C语言选择排序实现代码