package com.xxa;
public class Paixu {
//1.冒泡排序(找出每轮比较的最大的数,往上冒)
public void maopao(int a[]){
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-i-1; j++) {
if (a[j]>a[j+1]) {
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}+0
//2.选择排序(每轮找出最小的对号入座)
public void xuanzepaixu(int[] a){
for (int i = 0; i < a.length; i++) {
for (int j = i+1; j < a.length; j++) {
if (a[i]>a[j]) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
//3.快速排序(定一个中间值,使这个值大于它左边的数,小于它右边的数)
public void kuaiPaiXu(int sort[]){
kuaiPaiXu0(sort, 0, sort.length-1);
}
public void kuaiPaiXu0(int sort[],int left,int right){
int i=left;
int j=right;
int mid=sort[left];
while (i<j) {
while (i<j&&mid<sort[j]) {
j--;
}
if (i<j) {
int temp=sort[i];
sort[i]=sort[j];
sort[j]=temp;
}
while (i<j&&mid>sort[i]) {
i++;
}
if (i<j) {
int temp=sort[i];
sort[i]=sort[j];
sort[j]=temp;
}
}
if (i>left) {
kuaiPaiXu0(sort, left, i-1);
}
if (j<right) {
kuaiPaiXu0(sort, j+1, right);
}
}
//4.插入排序1(使一个有序的数组插入一个数到最后位置,再由后往前做比较,如果如果比这个数大就交换位置)
public void charupaixu1(int a[]){
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0; j--) {
if (a[j]<a[j-1]) {
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
} else {
break;
}
}
}
}
//4.插入排序2(使一个有序的数组插入一个数到最后位置,再由前往后查找一个比它大的数的位置插入进去)
public void charupaixu2(int a[]){
for (int i = 1; i < a.length; i++) {
int ren=a[i];
int room=i;
for (int j = 0; j < i; j++) {
if (a[j]>ren) {
room=j;
break;
}
}
for (int j = i-1; j >= room; j--) {
a[j+1]=a[j];
}
a[room]=ren;
}
}
//5.希尔排序
public void xierpaixu(int a[]){
int step=a.length%2==1&&a.length!=1?a.length/2+1:a.length/2;
while (step!=0) {
for (int i = 0; i < a.length-step; i++) {
for (int j = i; j < a.length-step; j+=step) {
if (a[j]>a[j+step]) {
int temp=a[j];
a[j]=a[j+step];
a[j+step]=temp;
}
}
}
step=step%2==1&&step!=1?step/2+1:step/2;
}
}
//6.堆排序
public void duipaixu(int a[]){
int sum=a.length-1;
while (sum>1) {
//建堆
for (int i = sum/2; i >= 1; i--) {
//在父节点a[i]与左孩子a[2*i],左孩子是a[2*i]比大小
if (2*i<=sum&&a[i]<a[2*i]) {
int temp=a[i];
a[i]=a[2*i];
a[2*i]=temp;
}
//在父节点a[i]与右孩子a[2*i+1],右孩子是a[2*i+1]比大小
if (2*i+1<=sum&&a[i]<a[2*i+1]) {
int temp=a[i];
a[i]=a[2*i+1];
a[2*i+1]=temp;
}
}
//第一个与最后一个交换 a[1]与a[sum]交换
int she=a[1];
a[1]=a[sum];
a[sum]=she;
sum--;
}
}
//7.基数排序
public void jisuPaiXu(int sort[]){
int maxLen=0;
for (int i = 0; i < sort.length; i++) {
int len=(sort[i]+"").length();
if (len>maxLen) {
maxLen=len;
}
}
Node[] node={new Node(0),new Node(1),new Node(2),new Node(3),new Node(4),
new Node(5),new Node(6),new Node(7),new Node(8),new Node(9)};
int shi=1;
for (int i = 0; i < maxLen; i++) {
for (int j = 0; j < sort.length; j++) {
int yushu=sort[j]/shi%10;
Node nd=node[yushu];
while (nd.next!=null) {
nd=nd.next;
}
nd.next=new Node(sort[j]);
}
shi*=10;
int x=0;
for (int j = 0; j < node.length; j++) {
Node nd=node[j].next;
while (nd!=null) {
sort[x++]=nd.data;
nd=nd.next;
}
node[j].next=null;
}
}
}
}
分享到:
相关推荐
提供Java版七种排序算法代码大全,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序
这里提供了冒泡排序,插入排序,递归排序,基数排序,快速排序,选择排序,希尔排序这几种排序算法。里面有大量的注释,可以理解实现思路
准备找工作或者面试可以看一下 七种排序还有优化
实现七种排序:冒泡,选择,快排,堆排,归并排序,基数排序,插入。
直接插入排序,折半插入排序,起泡排序 ,快速排序,简单选择排序,堆排序 ,基数排序 七种排序方法的实现和速度对比
七种排序算法的实现 题目和源程序 七种排序算法的实现 题目和源程序
七种排序算法Java版 java 学习
excel vba的七种排序代码,我认为很有参考的意义!希望对大家有所帮助!
七种排序算法(包括直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,简单选择排序,归并排序) 还有两道题 1./*设计并实现一个有效的对n个整数重排的算法,使得所有负数位于非负数之前,给出算法的性能...
七种排序算法Java版
七种排序算法(插入、选择、冒泡、归并、希尔、快速、桶)演示软件,支持手动输入数据执行演示。
七种排序算法的比较及每种排序的上机统计时间.doc
包含(归并排序、堆排序、希尔排序、快速排序、冒泡排序、直接插入/选择排序)七种排序算法的C++代码实现
七种排序的Java代码.pdf
Java版七种排序算法包含冒泡 插入 归并 选择 堆排序等,全是代码,可以直接试试
七种排序算法Java版.pdf
Java版七种排序算法.pdf
VB其它精彩编程-七种排序算法模块(4KB)