算法之简单排序
代码示例:
/** * 冒泡排序: * 复杂度: * 比较次数:n*(n-1)/2=O(n的平方) * 移动次数:平均移动(n的平方/4),所以复杂度也为n*(n-1)/2=O(n的平方) */ public void BubbleSort(){ int[] a= {3,65,4,9,5,0,6}; int temp; for(int i=0;i<a.length;i++){ for(int j=0;j<a.length-i-1;j++){ if(a[j]>a[j+1]){//从小到大排序 temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } } } for(int i=0;i<a.length;i++){ for(int j=0;j<a.length-i-1;j++){ if(a[j]<a[j+1]){//从大到小排序 temp=a[j+1]; a[j+1]=a[j]; a[j]=temp; } } } //打印 for(int i=0;i<a.length;i++){ System.out.println(a[i]); } } /** * 选择排序: * 复杂度: * 比较次数:n*(n-1)/2,所以为O(n的平方) * 移动次数:平均移动N/2,所以为O(N) */ public void selectSort(){ int[] a= {3,65,4,9,5,0,6}; int min_value; int min_index=0; int temp; for(int i=0;i<a.length;i++){ min_value=a[i]; min_index=i; for(int j=i+1;j<a.length;j++){ if(a[j]<min_value){ min_value=a[j]; min_index=j; } } temp=a[i]; a[i]=a[min_index]; a[min_index]=temp; } //打印 for(int i=0;i<a.length;i++){ System.out.println(a[i]); } } /** * 插入排序: * 复杂度: * 最大比较次数:n*(n-1)/2,平均比较次数:n*(n-1)/4,,所以为O(n的平方),比冒泡排序和选择排序少一半的比较时间 * 复制的次数大致等于比较的次数,然而一次复制的时间与一次交换的时间耗费不同。 * 对于随机数据,这个算法比冒泡排序快一倍,比选择排序略快。 */ public void insertSort(){ int[] a= {3,65,4,9,5,0,6}; int temp_i; for(int i=1;i<a.length;i++){ for(int j=0;j<i;j++){ if(a[i]<a[j]){// 从小到大 temp_i=a[i];//a[i]为将要插入的值 for(int r=i;r>j;r--){ a[r]=a[r-1];//在j到i的区间上,依次向后移动 } a[j]=temp_i;//插入a[i]的值 break; } } } //打印 for(int i=0;i<a.length;i++){ System.out.println(a[i]); } }