您的位置:首页 > 其它

bubbleSort, InsertionSort, mergeSort, heapSort实现

2012-07-13 14:06 323 查看
今天一口气将这四个排序算法都实现了下,个人觉得代码完成度还不错。

有空再把radixSort写完

#include <iostream>

void swap(int* a, int* b)
{
*a = *a^*b;
*b = *a^*b;
*a = *a^*b;
};

//Bubble Sort
void bSort(int* a, int n)
{
int j = n - 1;

bool isSorted;
while(j > 0)
{
isSorted = true;
for(int i = 0; i < j; i++)
{
if(a[i] > a[i + 1])
{
swap(&a[i], &a[i + 1]);
isSorted = false;
}
}

if(isSorted)
break;

j--;
}
};

//Insertion Sort
void iSort(int* a, int n)
{
int j = 1;

while(j < n)
{
for(int i = j; i > 0; i--)
{
if(a[i] < a[i - 1])
{
swap(&a[i], &a[i - 1]);
}
else
break;
}

j++;
}
};

//Merge Sort
void merge(int* a, int l, int r, int m)
{
int* arrL = new int[m - l + 1];
int* arrR = new int[r - m];

for(int i = l, k = 0; i <= m; i++, k++)
arrL[k] = a[i];

for(int i = m + 1, k = 0; i <= r; i++, k++)
arrR[k] = a[i];

int k = l;
int i = 0, j = 0;
while(i < m - l + 1 && j < r - m)
{
if(arrL[i] < arrR[j])
a[k] = arrL[i++];
else
a[k] = arrR[j++];

k++;
}

while(i < m - l + 1)
a[k++] = arrL[i++];

while(j < r - m)
a[k++] = arrR[j++];

delete[] arrL;
delete[] arrR;

};

void mSort(int* a, int l, int r)
{
if(l < r)
{
int m = (l + r) / 2;
mSort(a, l, m);
mSort(a, m + 1, r);
merge(a, l, r, m);
}
};

//Heap Sort
void siftDown(int* a, int n, int idx)
{
while(2 * idx + 1 < n)
{
int swapElm = a[idx];
int swapIdx = idx;
if(swapElm > a[2 * idx + 1])
{
swapElm = a[2 * idx + 1];
swapIdx = 2 * idx + 1;
}

if(2 * idx + 2 < n)
if(swapElm > a[2 * idx + 2])
{
swapElm = a[2 * idx + 2];
swapIdx = 2 * idx + 2;
}

if(idx != swapIdx)
{
swap(&a[swapIdx], &a[idx]);
idx = swapIdx;
}
else
return;
}
};

void heapify(int* a, int n)
{
int idx = (n - 2) / 2;

while(idx >= 0)
{
siftDown(a, n, idx);
idx--;
}
};

void heapSort(int* a, int n)
{
int* heap = new int
;

for(int i = 0; i < n; i++)
{
heapify(a + i, n - i);
}
};

int main()
{
int a[] = {12,5,45,66,15,4,2,3,1};
heapSort(a, 9);

for(int i = 0; i < 9; i++)
{
std::cout << a[i] << " ";
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  merge delete 算法