基本排序算法(选择,冒泡,一般插入,二分插入)源码
2008-03-14 12:29
337 查看
#include <cstdlib>
#include <iostream>
#include <cassert>
using namespace std;
/**//* output array elements */
template <class T>
void Print(const T *in, int n)
...{
for (int i = 0; i < n; i++)
...{
cout << in[i] << " ";
}
cout << endl;
}
template <class T>
void Exch2Item(T &item1, T &item2)
...{
T temp = item1;
item1 = item2;
item2 = temp;
};
/**//* bubble sort algorithm */
template <class T>
void BubbleSort(T *input, int n)
...{
assert(input != NULL);
for (int i = 0; i < n-1; i++)
...{
for (int j = 0; j < (n - i - 1) ; j++)
...{
if (input[j] > input[j + 1])
...{
Exch2Item(input[j], input[j + 1]);
}
}
}
}
/**//* select sort algorithm */
template <class T>
void SelectSort(T *input, int n)
...{
assert(input != NULL);
for (int i = 0; i < n-1; i++)
...{
for (int j = i + 1; j < n; j++)
...{
if (input[i] > input[j])
...{
Exch2Item(input[j], input[i]);
}
}
}
}
/**//* common insert sort algorithm */
template <class T>
void InsertSort(T *input, int n)
...{
T temp;
for (int i = 1; i < n; i++)
...{
temp = input[i];
for (int j = 0; j < i; j++)
...{
if (input[j] > temp)
...{
break;
}
}
for (int k = i; k >= j+1; k--)
...{
input[k] = input[k - 1];
}
input[j] = temp;
}
}
/**//* binary insert sort algorithm */
template <class T>
void BInsertSort(T *input, int n)
...{
T temp;
int l, r, mid, k;
for (int i = 1; i < n; i++)
...{
temp = input[i];
l = 0;
r = i - 1;
while (l <= r)
...{
mid = (l + r) / 2;
if (input[mid] < temp)
...{
l = mid +1;
}
else if (input[mid] > temp)
...{
r = mid -1;
}
else
...{
k = mid;
break;
}
}
/**//* now l is the place to insert, move forward the elements between l and i*/
for (int j = i; j >= l+1; j--)
...{
input[j] = input[j - 1];
}
input[l] = temp;
}
}
int main(int argc, char *argv[])
...{
int a[] = ...{12, 43, 1, 3, 5, 2, 7, 8, 0, 4, 89};
printf("%d ", sizeof(a));
BubbleSort(a, sizeof(a)/sizeof(int));
SelectSort(a, sizeof(a)/sizeof(int));
BInsertSort(a, sizeof(a)/sizeof(int));
Print(a, sizeof(a)/sizeof(int));
return 0;
}
相关文章推荐
- 排序算法(选择、希尔、二分插入、冒泡、直接插入、快速排序)
- 基本排序算法(冒泡、选择、插入)
- JavaScript基本排序算法(冒泡、选择、插入)
- 基本排序算法(选择,冒泡,希尔,插入)
- 排序算法(冒泡、选择、插入)附Java演示源码
- 基本排序算法——选择,插入,冒泡
- 基本排序算法(冒泡,快排,插入,希尔,选择,归并)
- 基本的排序算法(选择、插入、冒泡、希尔、归并、堆、快速)
- js实现排序算法(冒泡、选择、插入、二分插入、快速)
- 基本排序算法(选择、插入、冒泡)和希尔排序
- java实现最基本的几种排序算法(冒泡,选择,插入)
- Java之美之常见的几种排序算法-插入、选择、冒泡、快排、堆排等
- PHP四种基础排序算法--冒泡,直接插入,快速和选择排序
- (6)排序算法--- 冒泡 、选择、插入 《java数据结构与算法》一书第三章读书笔记。
- 算法学习(一) 基本的排序算法 选择 插入 希尔
- Java之常见的几种排序算法-插入、选择、冒泡、快排、堆排等
- 常见简单排序算法(选择,冒泡,插入)
- js实现排序算法——插入,选择,冒泡,快排
- 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比
- Java 排序算法 - 冒泡、快速,选择、插入