快速排序实现
#include<stdio.h>
void quicksort(int data[],int first,int last)
{
int i, j, t, base;
if (first>last)
return;
base=data[first]; /*用首元素作为基数*/
i=first;
j=last;
while(i!=j) /*重复下面的过程,直到i和j相遇*/
{
while(data[j]>=base && i<j) /*j从右向左,找到小于基数的元素*/
j--;
while(data[i]<=base && i<j) /*i从左向右,找到大于基数的元素*/
i++;
/*当i和j没有相遇有时候,交换两个数*/
if(i<j)
{
t=data[i];
data[i]=data[j];
data[j]=t;
}
}
data[first]=data[i]; /*将i,j相遇处的值保存在基数位置*/
data[i]=base; /*将基数保存在其应该的位置*/
quicksort(data,first,i-1); /*用同样的策略,递归处理左边的部分*/
quicksort(data,i+1,last); /*用同样的策略,递归处理右边的部分*/
}
int main( )
{
int data[10] = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};
quicksort(data, 0,9);
int i;
for(i=0; i<10; i++)
printf("%d ", data[i]);
printf("\n");
return 0;
}
非比较类排序算法:简单计数排序
#include <stdio.h>
int main()
{
int A[10] = {6,1,12,6,18,1,18,7,0,6}; /*通过初始化给出待排序值*/
int C[21] = {0}; /*用于计数的C数组的所有元素初值为0*/
int i, j;
/*为每一个待排序的数计数*/
for(i=0; i<10; i++)
C[A[i]]++; /*例如,A[i]为6时,C[6]++,C[i]是i出现的次数*/
/*根据计数信息输出*/
for(i=0; i<21; i++) /*考察待排序数据范围内的每一个数i*/
for(j=1; j<=C[i]; j++) /*输出C[i]个i,此即是排序的结果*/
printf("%d ", i);
printf("\n");
return 0;
}