直接插入排序与直接选择排序
2015-06-18 13:02
267 查看
直接插入排序和直接选择排序没啥可说的,上代码。
直接插入排序可以做一点点优化,即a[0]=temp,可以作为哨兵位,不用老是判断是否遍历到下标0了:
package sort;
public class InsertSort {
private long[] a;
private int elmentN;
public InsertSort(int max){
a=new long[max];
elmentN=0;
}
public void insert(long elment){
a[elmentN]=elment;
elmentN++;
}
public void display(){
for(int i=0;i<elmentN;i++){
System.out.print(a[i]+", ");
}
System.out.println();
}
public void insertSort(){
int i,j;
for(i=1;i<=elmentN-1;i++){
long temp=a[i];
j=i-1;
while(j>=0&&a[j]>temp){//为了避免判断j>=0 可以a[0]=temp 作为哨兵位
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
display();
}
}
public static void main(String args[]){
InsertSort bs=new InsertSort(10);
bs.insert(656);
bs.insert(541);
bs.insert(231);
bs.insert(63);
bs.insert(21);
bs.insertSort();
bs.display();
}
}
直接选择排序:在交换两个数的时候,swap函数可以不用中间变量,一点小小的技巧
package Sort;
public class SelectorSort {
public void selectorS(int a[],int n){
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++){
if(a[j]<a[index]){
index=j;
}
}
swap(a,i,index);
}
}
//不需要中间变量
private void swap(int a[],int i,int j){
直接插入排序可以做一点点优化,即a[0]=temp,可以作为哨兵位,不用老是判断是否遍历到下标0了:
package sort;
public class InsertSort {
private long[] a;
private int elmentN;
public InsertSort(int max){
a=new long[max];
elmentN=0;
}
public void insert(long elment){
a[elmentN]=elment;
elmentN++;
}
public void display(){
for(int i=0;i<elmentN;i++){
System.out.print(a[i]+", ");
}
System.out.println();
}
public void insertSort(){
int i,j;
for(i=1;i<=elmentN-1;i++){
long temp=a[i];
j=i-1;
while(j>=0&&a[j]>temp){//为了避免判断j>=0 可以a[0]=temp 作为哨兵位
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
display();
}
}
public static void main(String args[]){
InsertSort bs=new InsertSort(10);
bs.insert(656);
bs.insert(541);
bs.insert(231);
bs.insert(63);
bs.insert(21);
bs.insertSort();
bs.display();
}
}
直接选择排序:在交换两个数的时候,swap函数可以不用中间变量,一点小小的技巧
package Sort;
public class SelectorSort {
public void selectorS(int a[],int n){
for(int i=0;i<n-1;i++){
int index=i;
for(int j=i+1;j<n;j++){
if(a[j]<a[index]){
index=j;
}
}
swap(a,i,index);
}
}
//不需要中间变量
private void swap(int a[],int i,int j){
<span style="white-space:pre"> </span><span style="font-family: Arial, Helvetica, sans-serif;">//当i==j时,会导致a[i]==a[j]==0</span><span style="white-space:pre"> </span><span style="white-space:pre"> </span>if(i!=j){ <span style="white-space:pre"> </span>a[i]^=a[j]; <span style="white-space:pre"> </span>a[j]^=a[i]; <span style="white-space:pre"> </span>a[i]^=a[j]; } } public static void main(String[] args){ int a[]={10,4,9,7,8,5,11,23,-1,-3,34,3,4,8}; SelectorSort ss=new SelectorSort(); ss.selectorS(a, a.length); for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); } }
相关文章推荐
- 插入排序
- MySQL 优化
- Google排名优化的几个影响因素
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 优化Ruby脚本效率实例分享
- mysql -参数thread_cache_size优化方法 小结
- 详解mysql的limit经典用法及优化实例
- oracle数据库sql的优化总结
- SQL优化技巧指南
- SQL Server优化50法汇总
- C++快速排序的分析与优化详解
- 手把手教你如何优化C语言程序
- mysql 分页优化解析
- 非常不错的MySQL优化的8条经验
- php实现插入排序
- 优化Node.js Web应用运行速度的10个技巧
- JavaScript学习笔记(十七)js 优化
- 如何改进javascript代码的性能