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

} 

posted @ 2009-06-09 10:35  ________囧丶殇  阅读(315)  评论(0编辑  收藏  举报