C语言(5) - 选择排序 快速排序
/*
选择排序
找出最小的元素,与第一个元素对换
再在剩下的元素中找出最小的与第二个对换
*/
#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"
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"
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++;
}
}