手写排序

''' C++

std::vector arr;

// 插入排序
// 时间复杂度 n^2
void insertSort(vector& arr)
{
int len =arr.size();
for(int i=1;i<len;i++)
{
int v =arr[i],j;
for(j=i-1;v<arr[j]&&j>=0;j--)
{
arr[j+1] = arr[j];
}
arr[j+1] = v;
}
}
// 选择排序
void chooseSort(vector& arr)
{
int len = arr.size();
// 每次选择len-1次
for(int i=0;i<len-1;i++)
{
int k = -1,v = arr[i];
for(int j=i;j<len;j++)
{
if(v>arr[j]) // 这里写=排序就是不稳定的
{
v = arr[j];
k = j;
}
}
if(k!=-1 && k!=i)
swap(arr[k],arr[i]);
}
}
// 冒泡排序
void popSort(vector& arr)
{
int len = arr.size();
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j>0;j--)
{
if(arr.at(j)<arr.at(j-1))
{
swap(arr[j],arr[j-1]);
}
}
}
}
// 快速排序
void quickSort(vector& arr,int L,int R)
{
if(L>=R)return;
int l = L-1,r = R+1;
int v = arr[(L+R)/2];
while(l<r)
{
do l++; while(arr[l]<v);
do r--; while(arr[r]>v);
if(l<r)swap(arr[l],arr[r]);
}
quickSort(arr,L,r); // 0,0
quickSort(arr,r+1,R); // 1,1
}
// hash排序
void hashSort(std::vector& arr) {
std::map<int, int> count;
for (int i : arr)
count[i]++;

arr.clear();
for (const auto& kv : count)
    for (int i = 0; i < kv.second; i++)
        arr.push_back(kv.first);

}
// 归并排序

void merge(std::vector& vec, int left, int mid, int right) {
std::vector temp(right - left + 1);
int i = left, j = mid + 1, k = 0;

while(i <= mid && j <= right)
    temp[k++] = vec[i] <= vec[j] ? vec[i++] : vec[j++];

while(i <= mid)
    temp[k++] = vec[i++];

while(j <= right)
    temp[k++] = vec[j++];

for(k = 0, i = left; i <= right; ++i, ++k)
    vec[i] = temp[k];

}

void mergeSort(std::vector& vec, int left, int right) {
if(left < right) {
int mid = left + (right - left) / 2;
mergeSort(vec, left, mid);
mergeSort(vec, mid + 1, right);
merge(vec, left, mid, right);
}
}
'''

posted @ 2024-07-01 21:39  郭好好GH  阅读(18)  评论(0)    收藏  举报