快速排序(殷人昆版)

2021-07-09 06:36:59 字數 2088 閱讀 5471

快速排序的基本思想:任取待排序元素序列中的某個元素(例如取第乙個元素)作為基準,按照該元素的排序碼大小,將整個元素序列劃分為左右兩個子串行;左側子串行中元素的排序碼都小於基準元素的排序碼,右側子串行中的元素的排序碼都大於基準元素的排序碼。然後在左右序列中重複這種操作。

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 ...