臭皮匠排序(Stooge Sort)----(排序算法十二)

1.算法原理


2.代码实现

#include <stdio.h>

//printArray打印出数组
void printArray(int a[],int size){  
    printf("数组为:[%d] ",a[0]);  
    for (int i=1;i<size;i++)  
    {  
        printf(" %d ",a[i]);  
    }  
    printf("\n");  
}



void StoogeSort(int *a, int i, int j)  
{  
    if(a[i]>a[j])  {
		printf("%d<-->%d ",a[i],a[j]);
		printArray(a,10);
		a[0]=a[i];
		a[i]=a[j];
		a[j]=a[0];
	}

    if((i+1)>=j)  
        return;  
    int k = (j-i+1)/3;  
    StoogeSort(a, i, j-k);  
    StoogeSort(a, i+k, j);  
    StoogeSort(a, i, j-k);  
}  


void main()
{
	//a[0]监视哨
	int  a[10] ={0,9,8,7,6,5,4,3,2,1};  
	int  len=10;
	StoogeSort(a,1,len);
	printArray(a,len);
}



3.结果


9<-->3 数组为:[0]  9  8  7  6  5  4  3  2  1
8<-->7 数组为:[9]  3  8  7  6  5  4  9  2  1
7<-->6 数组为:[8]  3  7  8  6  5  4  9  2  1
8<-->7 数组为:[7]  3  6  8  7  5  4  9  2  1
6<-->5 数组为:[8]  3  6  7  8  5  4  9  2  1
7<-->6 数组为:[6]  3  5  7  8  6  4  9  2  1
8<-->7 数组为:[7]  3  5  6  8  7  4  9  2  1
6<-->4 数组为:[8]  3  5  6  7  8  4  9  2  1
7<-->6 数组为:[6]  3  5  4  7  8  6  9  2  1
8<-->7 数组为:[7]  3  5  4  6  8  7  9  2  1
5<-->4 数组为:[8]  3  5  4  6  7  8  9  2  1
6<-->2 数组为:[5]  3  4  5  6  7  8  9  2  1
7<-->6 数组为:[6]  3  4  5  2  7  8  9  6  1
8<-->7 数组为:[7]  3  4  5  2  6  8  9  7  1
9<-->8 数组为:[8]  3  4  5  2  6  7  9  8  1
7<-->1 数组为:[9]  3  4  5  2  6  7  8  9  1
8<-->7 数组为:[7]  3  4  5  2  6  1  8  9  7
9<-->8 数组为:[8]  3  4  5  2  6  1  7  9  8
2<-->1 数组为:[9]  3  4  5  2  6  1  7  8  9
6<-->2 数组为:[2]  3  4  5  1  6  2  7  8  9
3<-->2 数组为:[6]  3  4  5  1  2  6  7  8  9
2<-->1 数组为:[3]  2  4  5  1  3  6  7  8  9
4<-->2 数组为:[2]  1  4  5  2  3  6  7  8  9
5<-->4 数组为:[4]  1  2  5  4  3  6  7  8  9
4<-->3 数组为:[5]  1  2  4  5  3  6  7  8  9
5<-->4 数组为:[4]  1  2  3  5  4  6  7  8  9
数组为:[5]  1  2  3  4  5  6  7  8  9



posted @ 2013-10-24 22:02  赵侠客  阅读(604)  评论(0编辑  收藏  举报