1. 程式人生 > >臭皮匠排序(Stooge Sort)----(排序演算法十二)

臭皮匠排序(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