for (int i=0; i<nLen-1; i++) { for(int j=i+1; j<nLen; j++) { if(Compare(pData[i], pData[j])) { Swap(pData[i], pData[j]); } } }这种实现是总是把当前最小的置于排序的位置,缺点是需要交换多次.
int n = 0; for (int i=0; i<nLen-1; i++) { n = i; for(int j=i+1; j<nLen; j++) { if(Compare(pData[n], pData[j])) { n = j; } } Swap(pData[i], pData[n]); }针对上一个算法的缺点,做一点改进:记录当前最小的位置,之后做一次交换
20265 5770 12311 31633 23346 5839 12909 6759 32618 20794 0 5770 20265 12311 31633 23346 5839 12909 6759 32618 20794 1 5770 5839 20265 31633 23346 12311 12909 6759 32618 20794 2 5770 5839 6759 31633 23346 20265 12909 12311 32618 20794 3 5770 5839 6759 12311 31633 23346 20265 12909 32618 20794 4 5770 5839 6759 12311 12909 31633 23346 20265 32618 20794 5 5770 5839 6759 12311 12909 20265 31633 23346 32618 20794 6 5770 5839 6759 12311 12909 20265 20794 31633 32618 23346 7 5770 5839 6759 12311 12909 20265 20794 23346 32618 31633 8 5770 5839 6759 12311 12909 20265 20794 23346 31633 32618未改进的运行结果,排序不稳定
10815 18874 18420 9071 2551 14632 23080 9881 16740 1370 0 1370 18874 18420 9071 2551 14632 23080 9881 16740 10815 1 1370 2551 18420 9071 18874 14632 23080 9881 16740 10815 2 1370 2551 9071 18420 18874 14632 23080 9881 16740 10815 3 1370 2551 9071 9881 18874 14632 23080 18420 16740 10815 4 1370 2551 9071 9881 10815 14632 23080 18420 16740 18874 5 1370 2551 9071 9881 10815 14632 23080 18420 16740 18874 6 1370 2551 9071 9881 10815 14632 16740 18420 23080 18874 7 1370 2551 9071 9881 10815 14632 16740 18420 23080 18874 8 1370 2551 9071 9881 10815 14632 16740 18420 18874 23080改进的排序的运行结果,排序稳定效率有所提升
原文地址:http://blog.csdn.net/arbboter/article/details/37735925