随手记录--java排序(1)冒泡、选择、希尔、归并
来源:互联网 发布:php工程师需要具备 编辑:程序博客网 时间:2024/06/05 22:34
/**
* 迭代的对序列中的元素进行比较,需要就交换
* 没有交换操作就意味着排序完成
* @param A
* @param n
*/
void BubbleSort(int A[],int n){
int pass,i,temp,swapped=1;
for(pass=n-1;(pass>=0) || (swapped!=0);pass--){
swapped=0;
for(i=0;i<pass-1;i++){
if(A[i]>A[i+1]){
temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
swapped=1;
}
}
}
}
//选择排序是原地排序算法,适用于小文件,优点:容易实现,不需要额外空间
//缺点,扩展性差
void Selection(int a[],int n){
int i,j,min,temp;
for (i = 0; i< n-1; i++) {
min=i;
for(j=i+1;j<n;j++){
if(a[j]<a[min]){
min=j;
}
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
}
/**
* 插入排序
* 迭代地随机的从序列中读取操作并插入待排序序列
*优点:实现简单,不需要额外辅助空间,
*/
void InsertSort(int a[],int n){
int i,j,v;
for(i=2;i<n-1;i++){
v=a[i];
j=i;
while(a[j-1]>v && j>=1){
a[j]=a[j-1];
j--;
}
a[j]=v;
}
}
/**
* 希尔排序,即缩小增量排序,也称n间距插入排序
* 比较和交换数组中每个距离为h的元素,然后h--
* 小列表适合
*/
void ShellSort(int a[],int size){
int i,j,h,v;
for(h=1;h <=(size/9);h = 3*h + 1);
for( ; h>0 ;h=h/3){
for(i=h+1;i<=size;i+=1){
v=a[i];
j=i;
while(j>h && a[j-h]>v){
a[j]=a[j-h];
j-=h;
a[j]=v;
}
}
}
}
/**
* 归并排序,分治
* 归并:把两个已排序的合并乘更大的已排序的
* 选择:把文件分层包含k个最小元素和n-k个最大元素
*
*/
void mergeSort(int a[],int temp[],int left,int right){
int mid;
if(right > left){
mid=(right+left)/2;
mergeSort(a,temp,left,mid);
mergeSort(a,temp,mid+1,right);
merge(a,temp,left,mid+1,right);
}
}
void merge(int a[],int temp[],int left,int mid,int right){
int i,left_end,temp_pos,size;
left_end=mid-1;
temp_pos=left;
size=right-left+1;
while((left<=left_end)&&(mid<=right)){
if(a[left]<=a[mid]){
temp[temp_pos]=a[left];
temp_pos=temp_pos+1;
left=left+1;
}else{
temp[temp_pos]=a[mid];
temp_pos=temp_pos+1;
mid=mid+1;
}
}
while(left<=left_end){
temp[temp_pos]=a[left];
left=left+1;
temp_pos=temp_pos+1;
}
while(mid<=right){
temp[temp_pos]=a[mid];
mid=mid+1;
temp_pos=temp_pos+1;
}
for(i=0;i<=size;i++){
a[right]=temp[right];
right=right-1;
}
}
* 迭代的对序列中的元素进行比较,需要就交换
* 没有交换操作就意味着排序完成
* @param A
* @param n
*/
void BubbleSort(int A[],int n){
int pass,i,temp,swapped=1;
for(pass=n-1;(pass>=0) || (swapped!=0);pass--){
swapped=0;
for(i=0;i<pass-1;i++){
if(A[i]>A[i+1]){
temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
swapped=1;
}
}
}
}
//选择排序是原地排序算法,适用于小文件,优点:容易实现,不需要额外空间
//缺点,扩展性差
void Selection(int a[],int n){
int i,j,min,temp;
for (i = 0; i< n-1; i++) {
min=i;
for(j=i+1;j<n;j++){
if(a[j]<a[min]){
min=j;
}
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}
}
/**
* 插入排序
* 迭代地随机的从序列中读取操作并插入待排序序列
*优点:实现简单,不需要额外辅助空间,
*/
void InsertSort(int a[],int n){
int i,j,v;
for(i=2;i<n-1;i++){
v=a[i];
j=i;
while(a[j-1]>v && j>=1){
a[j]=a[j-1];
j--;
}
a[j]=v;
}
}
/**
* 希尔排序,即缩小增量排序,也称n间距插入排序
* 比较和交换数组中每个距离为h的元素,然后h--
* 小列表适合
*/
void ShellSort(int a[],int size){
int i,j,h,v;
for(h=1;h <=(size/9);h = 3*h + 1);
for( ; h>0 ;h=h/3){
for(i=h+1;i<=size;i+=1){
v=a[i];
j=i;
while(j>h && a[j-h]>v){
a[j]=a[j-h];
j-=h;
a[j]=v;
}
}
}
}
/**
* 归并排序,分治
* 归并:把两个已排序的合并乘更大的已排序的
* 选择:把文件分层包含k个最小元素和n-k个最大元素
*
*/
void mergeSort(int a[],int temp[],int left,int right){
int mid;
if(right > left){
mid=(right+left)/2;
mergeSort(a,temp,left,mid);
mergeSort(a,temp,mid+1,right);
merge(a,temp,left,mid+1,right);
}
}
void merge(int a[],int temp[],int left,int mid,int right){
int i,left_end,temp_pos,size;
left_end=mid-1;
temp_pos=left;
size=right-left+1;
while((left<=left_end)&&(mid<=right)){
if(a[left]<=a[mid]){
temp[temp_pos]=a[left];
temp_pos=temp_pos+1;
left=left+1;
}else{
temp[temp_pos]=a[mid];
temp_pos=temp_pos+1;
mid=mid+1;
}
}
while(left<=left_end){
temp[temp_pos]=a[left];
left=left+1;
temp_pos=temp_pos+1;
}
while(mid<=right){
temp[temp_pos]=a[mid];
mid=mid+1;
temp_pos=temp_pos+1;
}
for(i=0;i<=size;i++){
a[right]=temp[right];
right=right-1;
}
}
0 0
- 随手记录--java排序(1)冒泡、选择、希尔、归并
- 排序及选择算法的java实现(一)选择、冒泡、插入、希尔、归并、快排
- 排序算法,选择,插入,冒泡,希尔,归并
- 插入 | 希尔 | 冒泡 | 快速 | 选择 | 归并排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 六大经典排序算法(Java版):冒泡、选择、插入、希尔、快速、归并
- 常用排序算法简介与java实现(冒泡、插入、选择、希尔、归并、快排)
- 快排 选择排序 冒泡排序 归并排序 希尔排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 排序算法Java描述:选择、冒泡、插入、希尔、归并、快速及三向切分快速排序
- 排序总结:插入(简单和改进)、希尔、选择、冒泡、快速、堆排序、归并排序
- Java-十种内部排序实现(选择,冒泡,插入,希尔,堆,归并,快速,基数,计数,桶)及代码下载
- Java语言实现九大排序算法(快速、归并、堆、选择、插入、计数、基数、希尔、冒泡)
- 最简单之Java实现冒泡排序、选择排序、插入排序、希尔排序、归并排序和快速排序(转载请注明出处)
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 《冒泡,选择,插入,归并,希尔,快速》排序算法java实现一览
- java排序算法(冒泡,插入,选择,快速,堆,归并,希尔,基数)
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
- 【C语言训练】委派任务
- Flask 使用消息闪烁(flash)报错
- 编写java程序151条建议读书笔记(6)
- js瀑布流
- 随手记录--java排序(1)冒泡、选择、希尔、归并
- 移植2013Uboot启动信息如下:有些是自己添加的:仅供参考
- hbase中java中API
- 随手记录--python基础知识
- Divideing Jewels(dfs)
- 空指针异常
- poj 2567 zzu10395 nyoj1254 Code the Tree(Prufer数列)
- bzoj1487: [HNOI2009]无归岛
- echart和d3.js