排序(Sort)--【一】
来源:互联网 发布:歌曲伴奏降调软件 编辑:程序博客网 时间:2024/05/16 13:56
排序,对于大家再熟悉不过了吧。我们之前在学习c语言的时候接触过的冒泡排序,选择排序等。今天给大家介绍两种新的排序。
1、直接插入排序
升序排列:将第一个数确定好,从下标为1的数开始插入,如果插入的数比前一个数大,就插入到前一个数后的位置。否则,将前一个数的位置后移,再与再往前的数比较,依次类推。
时间复杂度为:O(N*N) 最好情况:O(N)
主要实现代码(vs2013):
#pragma once#include<iostream>using namespace std;void InsertSort(int *a,size_t size){for(size_t i = 1; i < size; ++i){int end = i-1;int tmp = a[i];while(end >= 0){if(tmp < a[end]) //升序 //if(tmp > a[end]) //降序{a[end+1] = a[end];--end;}else{break;}}a[end+1] = tmp;}}void Display(int *a,size_t size){for(size_t i = 0; i < size; ++i){cout<<a[i]<<" ";}cout<<endl;}void TestInsert(){int a[] = {2,5,4,9,3,6,8,7,1,0};size_t size = sizeof(a)/sizeof(a[0]);InsertSort(a,size);Display(a,size);}
运行结果:
2、希尔排序
当在插入排序中,数据特别多时,且不是有序的。这时采用插入排序就特别的慢。尤其是对于升序情况,所给的数据是降序,那么就需要每次挪动数据。这就显得效率比较低了。于是引入了希尔排序,将它们先排列的接近有序,再进行插入排序就容易多了。
主要实现代码(vs2013):
void ShellSort(int* a,size_t size){int gap = size;int end = 0;int tmp = 0;while(gap > 1){gap = gap/3+1;for(size_t i = gap; i < size; ++i){end = i-gap;tmp = a[i];while(end >= 0){if(tmp > a[end]) //降序 //if(tmp < a[end]) 升序{a[end+gap] = a[end];end -= gap;}elsebreak;}a[end+gap] = tmp;}}}void Display(int *a,size_t size){for(size_t i = 0; i < size; ++i){cout<<a[i]<<" ";}cout<<endl;}void TestInsert(){int a[] = {0,1,2,3,4,5,6,7,8,9};size_t size = sizeof(a)/sizeof(a[0]);ShellSort(a,size);Display(a,size);}
运行结果:
0 0
- 排序(Sort)--【一】
- 详细解说 STL 排序(Sort) (一)
- JavaScript 中级(一)---- sort排序
- 排序算法(一)—插入排序(Insertion sort)
- 排序(一)之冒泡排序Bubble Sort
- 排序算法(一)-选择排序(Selection Sort)
- hdu 1009 肥胖鼠 贪心(一) sort 排序函数
- 排序(Sort)
- 排序函数sort()
- 图解-排序(Sort)
- 图解排序(Sort)
- 排序(Sort)
- 排序(Sort)
- 排序(sort qsort)
- 排序(Sort)
- 稳定排序(sort)
- sort()排序
- Spark sort (排序)
- hello
- elasticsearch服务器开发学习笔记(一)
- 静态代理 & 动态代理
- 深入理解Activity启动流程(一)–Activity启动的概要流程
- javaWeb项目的classpath说明
- 排序(Sort)--【一】
- 理解OAuth 2.0
- 对List里的对象元素进行排序
- 设计模式——观察者模式(Observer Pattern)
- 上周热点回顾(2.13-2.19)
- 14.3.1
- 在Eclipse Subversion中使用Beyond Compare对比文件
- LeetCode
- MediaPlay播放不出声音