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;
}
有空再把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;
}
相关文章推荐
- Bubble sort, Insertion sort, merge sort, quick sort, heap sort
- PAT程序设计考题——甲级1098(Insertion or Heap Sort ) C++实现
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- 排序算法的判别: Insert or Merge,Insertion or Heap Sort
- HeapSort 堆排序 基于伪代码实现
- 堆排序heapSort java实现
- 1098. Insertion or Heap Sort (25)
- 根据Merge Sort原理, 自己实现的归并排序算法+详细注释+代码(C#,C/C++) [分享]
- 堆排序(Heapsort)之Java实现
- insertion mergesort bubble sort 复习 python
- 堆排序算法(Heap Sort) Java实现
- leetcode 【 Insertion Sort List 】 python 实现
- 插入排序 直接插入排序的PHP实现 Straight Insertion Sort
- 使用python实现排序算法(Insertion Sort)
- 归并排序(Merge Sort)递归、非递归 Java实现
- 归并排序(merge sort)算法实现
- Insertion Sort, Merge Sort
- c编写 Insertion or Heap Sort
- HeapSort非递归实现
- PAT A 1098. Insertion or Heap Sort (25)