五种排序算法
来源:互联网 发布:手机淘宝1元秒杀入口 编辑:程序博客网 时间:2024/05/17 03:45
五种排序算法
#include <iostream>
#include <stdlib.h>
using namespace std;
/////////////////////插入排序//////////////////////////////
插入排序是从数组中不断的取出元素并将其插入到已好排序的数组中的适当位置,
/////////////////////插入排序//////////////////////////////
插入排序是从数组中不断的取出元素并将其插入到已好排序的数组中的适当位置,
void sort(int *a,int n){
int j,t,i;
for(i=1;i<n;i++){
j=i;
t=a[i]; //保存插入值 (待排序数组中的首元素),
while(j>0 && a[j-1]>t){ //从J开始向a[0]扫描,不断把较大的值向后移动
a[j--]=a[j-1];
}
a[j]=t; // 直到扫描到a[j-1]=<a[j] || j>0 时,把待插入值插入正确位置
}
}
/////////////////////希尔排序//////////////////////////////
希尔排序是插入排序的加强版,
原理: 首先将数组按步长gap=length/2分为n组,
每组两个元素,第N组的一个元素的下标为N-1 第二个元素下标为N-1+cap
对每组的元素进行插入排序,然后将步长减半,再次分组,再次对每组进行插入排序,一直划分到gap=1为止
void shellsort(int *a,int n){
int gap = n/2; // 分组
while(gap>=1){
for(int i=gap;i<n;i++){ //循环n-gap次(完成所有组的排序)
int j,t=a[i]; // j==每组的第一个元素 t=第二个元素
for(j=i-gap;j>=0 && a[j]>t;j=j-gap){ // ! j=j-gap (终止循环)(1)
a[j+gap]=a[j]; //如果满足条件,把每组的第一个元素赋值给第二个
}
a[j+gap]=t; // 因为(1)处改变了j的值,这里要加回来 (把T赋值给第一个元素(完成交换))
}
gap/=2; //重新分组
}
}
///////////////////////冒泡排序////////////////////////////
最简单的排序算法
/////////////////////希尔排序//////////////////////////////
希尔排序是插入排序的加强版,
原理: 首先将数组按步长gap=length/2分为n组,
每组两个元素,第N组的一个元素的下标为N-1 第二个元素下标为N-1+cap
对每组的元素进行插入排序,然后将步长减半,再次分组,再次对每组进行插入排序,一直划分到gap=1为止
void shellsort(int *a,int n){
int gap = n/2; // 分组
while(gap>=1){
for(int i=gap;i<n;i++){ //循环n-gap次(完成所有组的排序)
int j,t=a[i]; // j==每组的第一个元素 t=第二个元素
for(j=i-gap;j>=0 && a[j]>t;j=j-gap){ // ! j=j-gap (终止循环)(1)
a[j+gap]=a[j]; //如果满足条件,把每组的第一个元素赋值给第二个
}
a[j+gap]=t; // 因为(1)处改变了j的值,这里要加回来 (把T赋值给第一个元素(完成交换))
}
gap/=2; //重新分组
}
}
///////////////////////冒泡排序////////////////////////////
最简单的排序算法
void sort1(int *a,int n){
int i,j,t;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
}.
////////////////////////选择排序////////////////////////////
选择排序的原理是不断的从待排序数组中找出最小值,并放入拟构的新数组中,从而组成排好序的数组
////////////////////////选择排序////////////////////////////
选择排序的原理是不断的从待排序数组中找出最小值,并放入拟构的新数组中,从而组成排好序的数组
void sort2(int *a,int n){
int i,j,min,t;
for(i=0;i<n;i++){
min=i; //用于存放最小值下标
for(j=i+1;j<n;j++){ //找出最小值下标
if(a[min]>a[j]){
min=j;
}
}
if(i!=min){ //把最小值插入已经排好序的数组
t=a[i];
a[i]=a[min];
a[min]=t;
}
}
}
////////////////////////快速排序////////////////////////////
原理: 从数组中找出一个基准值,把比它小的数放在右边,大的放在左边,划分为两段,然后对划分出来的两段进行相同操作
////////////////////////快速排序////////////////////////////
原理: 从数组中找出一个基准值,把比它小的数放在右边,大的放在左边,划分为两段,然后对划分出来的两段进行相同操作
void sort3(int *a,int l,int r){
if(l<r){
int i=l,j=r,x=a[l];
while(i<j){
while(i<j && a[j]>=x){ //从右向左找出小于基准的元素的下标
j--;
}
if(i<j){ (1)
a[i++]=a[j];
}
while(i<j && a[i]<x){ //从左向右找出大于基准元素的下标
i++;
}
if(i<j){ (2)
a[j--]=a[i];
}
}
a[i]=x; (3)
sort3(a,l,i-1);
sort3(a,i+1,r);
}
}
int main(void)
{
int a[]={5,0,2,3,4,6};
sort1(a,6);
cout<<a[0]<<endl;
return 0;
}
正在加载中...
0 0
- 五种排序算法
- 五种排序算法实现
- 五种排序算法对比
- 五种排序算法对比
- 五种排序算法对比
- 五种排序算法实现
- 五种排序算法比较
- 五种常见的排序算法
- 常见的五种排序算法
- 五种排序算法的JAVA 实现
- JAVA实现五种排序算法
- 常见五种排序算法PHP
- 排序算法五例
- 排序算法五例
- 排序算法五例
- 排序算法五例
- 排序算法五例
- 排序算法五例
- JAVA创建TXT,并写入数据
- 自学Java系列 笔记1 java的基本语法2
- 数字对象(NSNumber)常用的方法
- 倒推序列,如b[i]0 1 0(前面有几个数比b[i] 大)推a[i]2 1 3 ,树状数组 SPOJ 227 Ordering the Soldiers
- leetCode4.1.2(Longest Valid Parentheses)
- 五种排序算法
- 初探Makefile
- Spring学习(十)spring mvc入门
- 9-1
- 类的解剖(获取类的定义信息)
- LightOJ 1155 - Power Transmission【拆点网络流】
- c++ - dec2bin / bin2dec
- 跨出第一步
- UFT SPY模式