快速排序的基本思想:任取待排序元素序列中的某個元素(例如取第乙個元素)作為基準,按照該元素的排序碼大小,將整個元素序列劃分為左右兩個子串行;左側子串行中元素的排序碼都小於基準元素的排序碼,右側子串行中的元素的排序碼都大於基準元素的排序碼。然後在左右序列中重複這種操作。
void swap(int& a, int& b)
int partition(int v, int low, int high)
} }v[low] = v[privotpos];
v[privotpos] = privot;
return privotpos;
}void quicksort(int v, const int left, const int right)
}
快速排序的改進演算法:當序列長度m取值為5~25時,採用直接插入排序比全部使用快速排序快10%
#define m 5
void quicksort_insertsort(int v, const int left, const int right)
if(left < right)
}
void quicksort(int v, const int left, const int right)
}
void insertsort(int v, const int left, const int right)
while(j >= left && tmp < v[j]);
//向後移位
v[j+1] = tmp;
} }}
快速—直接插入混合排序演算法
void newquicksort(int v, const int left, const int right)
if(left < right) }
void hybirdsort(int v, const int left, const int right)
三者中取中演算法來實現快速排序基準位
int median3(int v, int left, int right)
if(v[right] < v[k])
if(k != left)
if(mid != right && v[mid] < v[right])
return v[right];
}//一趟劃分演算法的實現
int partition_3(int v, int left, int right)
} return i;
}void newquicksort_3(int v, const int left, const int right)
//三者中取中值放在最右端
if(left < right) }
void hybirdsort_3(int v, const int left, const int right)
三路劃分的快速排序演算法
void quicksortnew(int v, int left, int right)
i = left-1;
j = right;
p = left-1;
q = right;
while(1)
}while(privot < v[--j])
}if(i >= j)
swap(v[i], v[j]);
if(v[i] == privot)
if(privot == v[j])
}if(v[i] > v[right])
else
j--;
i++;
while(k >= q)
for(k = left; k < p+1; k++, j--)
quicksortnew(v, left, j);
quicksortnew(v, i, right);
}
C 迴圈鍊錶(殷人昆版)
include include include using namespace std templatestruct circlistnode circlistnode t d,circlistnode n null data d next n templateclass circlist circ...
C 雙向迴圈鍊錶(殷人昆版)
include include include using namespace std templatestruct dblnode dblnode t d,dblnode left null,dblnode right null data d llink left rlink right temp...
資料結構殷人昆程式設計練習第一章概論
1.15 求三個整數中的最大 最小和中間數。include using namespace std void fun int a,int b,int c else if b a b c else else else cout max max endl cout center center endl ...