选择排序的两种实现方法
来源:互联网 发布:巴克内尔大学 知乎 编辑:程序博客网 时间:2024/05/22 04:25
选择排序时间复杂度为O(n^2)
我个人感觉选择排序和插入排序非常的相似,选择排序是在有序队列后找到一个最大值放到有序队列后面,插入排序是在有序队列后随便一个数字,插入到有序队列中使之有序。
int i, j;int index;int temp;for (i = 1;i <= num;i++) {temp = arr[i];index = 0;for (j = i+1;j <= num;j++) {if ( temp > arr[j]) {temp = arr[j];index = j;}}if (index) {temp = arr[i];arr[i] = arr[index];arr[index] = temp;}}
但是这个方法需要很多的多余空间。这个实在是太浪费空间了,在这基础上有人创造出了堆排序,感觉差不多。
准备专门整一下堆排序,就不在这里讲了。
int tier = 1;for (int i = 1;i < num;i++) tier++;int k = pow (2, tier) -1;int k1 = pow (2, tier-1) -1;int *parr = (int*) malloc (sizeof (int) * (k+1));#define MAX 100000for (int i = 1;i <= num;i++) {parr[i+k1] = arr[i];}for (int i = k1+num+1;i <= k;i++) {parr[i] = MAX;}for (int i = 1;i <= num;i++) {for (int j = k;j >= 1;j -= 2) {if (parr[j] < parr[j-1]) {parr[j/2] = parr[j];<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else {<span style="white-space:pre"></span>parr[j/2] = parr[j-1];}}printf ("%d ", parr[1]);int bit = 1;int temp = parr[1];while (2*bit <= k) {if (parr[bit] == parr[bit*2]) {bit *= 2;}if (parr[bit] == parr[bit*2+1]) {bit = bit*2 + 1;}}parr[bit] = MAX;<span style="white-space:pre"></span>}printf ("\n");
0 0
- 选择排序的两种实现方法
- 黑马程序员——Java基础 数组排序的两种实现方法,选择和冒泡
- 详谈排序算法之选择类排序(两种方法实现堆排序)
- List排序的两种实现方法
- 快速排序的两种实现方法
- 选择排序的两种实现(Java语言)di
- 两种排序方法(插入排序和选择排序)
- 我最喜欢的两种排序方法(简单选择排序和冒泡排序)
- shell实现菜单选择的两种方法
- 数组排序的两种算法--冒泡排序/选择排序
- 选择排序实现方法
- 两种方法实现链表的节点操作排序
- 实现一个简单的 成绩排序(两种方法)
- 链表排序的两种实现方法
- Java实现对象排序的两种方法
- 归并排序--自上而下和自下而上两种方法的实现
- 图拓扑排序的两种方法实现
- Python实现归并排序的两种方法
- uva 11595 - Crossing Streets EXTREME(切割多边形)
- 一维数组
- OC--@property指令
- 修改intellij idea的配置
- HP实训心得
- 选择排序的两种实现方法
- win Apache 使用 openssl 开启ssl步骤
- [Objective-c]_[NSString的基本使用]
- hibernate.cfg.xml 配置 -- 解决数据库访问导致的中文乱码
- Apache之——配置虚拟目录(监听多个端口)
- 设计模式-结构型之装饰模式
- poi excel 获取列名
- EC2的meta-data
- Android中webview和js之间的交互及注意事项