void swap(char* a, char* b)
{
if(a == 0 || b == 0){
return;
}
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
//假的冒泡排序(沉底排序,不好)
char* bub_sort(char* ch, int n)
{
int i,j;
if(ch == 0){
return 0;
}
for(i = 0; i < n - 1; i++){
for(j = i + 1; j <= n - 1; j++){
if(ch[i] > ch[j]){
swap(ch + i, ch + j);
}
}
}
return ch;
}
//改进后的假的冒泡排序(沉底排序,还是不好)
char* bub_sort_b(char* ch, int n)
{
int i,j,m;
if(ch == 0){
return 0;
}
for(i = 0; i < n - 1; i++){
m = i;
for(j = i + 1; j <= n - 1; j++){
if(ch[m] > ch[j]){
m = j;
}
}
if(i != m)
swap(ch + i, ch + m);
}
return ch;
}
冒泡排序:
void BasicBubble(char *myArray, int Length)
{
for(int i = 0; i < Length - 1; i++) //循环的趟数: Length
{
for(int j = 0; j < Length - 1 - i; j++)//每趟循环比较的次数: Length - 1 - i
{
if( myArray[j] > myArray[j+1] )
{
swap(myArray+j, myArray+j+1);
}
}
}
}
改进的冒泡排序
/// 设置一个标志位,当没有交换的时候这个标志位不会变化,那么说明数据已经
/// 排序好了,就不需要再进行剩余的循环。只有在标志位被重新设置的情况下才会
/// 进行剩余的循环。
void ImproveBubble1(char *myArray, int Length)
{
bool isSorted = false;
for(int i = 0; i < Length - 1 && !isSorted; i++)//只有在没有排序的情况下才继续循环
{
isSorted = true; //设定排序标志
for(int j = 0; j < Length - 1 - i; j++)
{
if( myArray[j] > myArray[j+1] )
{
isSorted = false; //如果是没有排序,就重新设定标志
swap(&myArray[j], &myArray[j+1]);
}
}
}
}
引用:
! 1. http://www.cnblogs.com/dylan_zb/archive/2011/03/29/1999130.html