您的位置:首页 > 编程语言 > C语言/C++

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++;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐