#include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM 9 int count = 0; //(1-还需要的步数/最少步数)*100% = 完成率 void random(int a[]) { int i;int index, tmp; for (i=0;i<NUM;i++) { a[i]=i; } srand(time(NULL)); for (i = 0; i <NUM; i++) { index = rand() % (NUM - i) + i; if (index != i) { tmp = a[i]; a[i] = a[index]; a[index] = tmp; } } } int *min(int *a ,bool* b) { int min=30; int *pmin = &min; for (int i=0;i<NUM;i++) { if (b[i]==false) { if (a[i]<(*pmin)) { pmin=&a[i]; } } } return pmin; } int* FirstFalseAd(int *a ,bool* b ) { for (int i=0;i<NUM;i++) { if (b[i]==false) { return &a[i]; } } return NULL; } int FirstFalseIdx(int *a ,bool* b ) { for (int i=0;i<NUM;i++) { if (b[i]==false) { return i; } } return -1; } bool ExchangeSort(int *a ,bool *b) { int *pmin = NULL ; int *pfirstfalse = NULL; int firstidx = -1; int i,temp; pmin = min(a,b); pfirstfalse = FirstFalseAd(a,b); firstidx = FirstFalseIdx(a,b); if ((pfirstfalse!=NULL)&(pmin!=pfirstfalse)) { temp = *pmin; *pmin = *pfirstfalse ; *pfirstfalse = temp; for(i=0;i<NUM;i++) { if (i==a[i]) { b[i]=true; } else { b[i] = false; } } count++; printf("/n"); for (i = 0; i < NUM; i++) printf("%d ", a[i]); ExchangeSort(a ,b); } return true; } int main() { int i; int a[NUM] ; random(a); bool b[NUM]; for(int i=0;i<NUM;i++) { if (i==a[i]) { b[i]=true; } else { b[i] = false; } } for (i = 0; i < NUM; i++) printf("%d ", a[i]); printf("/n"); ExchangeSort(a ,b); printf("/n"); printf("/n"); printf("交换次数为%d",count); printf("/n"); printf("/n"); system("pause"); return 0; }