之前学数据结构与算法的时候学过一些排序的算法,但都是用的C++实现,在了解到java之后,其实感觉在一些算法实现过程中,Java好像比C++容易一些。现在很多代码还写不来,所以有部分就参考了一些大佬的代码○·○,侵权联系删☺
1.冒泡排序
依次做相连数据之间大小的比较,如果后数据比前面小则交换位置
实现:
1.外层循环:控制冒泡次数
2.内层循环:控制每次冒泡的过程
public class sort {
public static void main(String[] args) {
int a[]= {5,3,6,8,1,0,2};
System.out.print("排序前:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
for(int i=0;i<a.length;i++) {//冒泡排序实现
for(int j=a.length-1;j>i;j--) {
int temp=0;
if(a[j]<a[j-1]){//交换位置
temp=a[j-1]; a[j-1]=a[j]; a[j]=temp;
}
}
}
System.out.print("\n排序后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}
2.合并排序
之前学算法时对合并排序的讲解:
java实现:
import java.util.Arrays;
public class merge_sort {
public static void mergeSort(int a[]) {//拆分数组
int length=a.length;
if(length>1) {
int middle=length/2;
int a1[]=Arrays.copyOfRange(a, 0, middle);
int a2[]=Arrays.copyOfRange(a, middle, length);
mergeSort(a1);
mergeSort(a2);
merge(a1,a2,a);
}
}
public static void merge(int a1[],int a2[],int a[]) {//合并数组
int i=0,j=0,k=0;
while(i<a1.length && j<a2.length) {
if(a1[i]<=a2[j]) {a[k]=a1[i];i++;}
else {a[k]=a2[j];j++;}
k++;
}
if(i==a1.length) {
while(k<a.length) {a[k]=a2[j];k++;j++;}
}
else if(j==a2.length) {
while(k<a.length) {a[k]=a1[i];k++;i++;}
}
}
public static void main(String[] args) {//简单验证
int a[]={2,8,10,5,7,9,3,4,1,6};
System.out.print("排序前:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
mergeSort(a);
System.out.print("\n排序后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}
3.快速排序
java实现:
public class quickSort {
public static void quick_sort(int a[],int left,int right) {
int l=left,r=right;
if(l>r) { return; }//左右扫描交叉,递归算法出口
int key=a[left];//确定key
while(l<r) {
while(l<r && a[r]>key) {r--;}//从右往左找小于key的数
while(l<r && a[l]<=key) {l++;}//从左往右找第一个大于key的值
if(l<r) {//交换找到的两个值
int temp=a[l];a[l]=a[r];a[r]=temp;}
}
int temp=a[l];a[l]=a[left];a[left]=temp;//调整key的值
quick_sort(a,left,l-1);//递归调用
quick_sort(a,l+1,right);
}
public static void main(String[] args) {
int a[]={2,8,10,5,7,9,3,4,1,6};
System.out.print("排序前:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
quick_sort(a,0,a.length-1);
System.out.print("\n排序后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}
4.插入排序
java实现:
public class insertSort {
public static void insert_sort(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;
}
}
}
}
public static void main(String[] args) {
int a[]={2,8,10,5,7,9,3,4,1,6};
System.out.print("排序前:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
insert_sort(a);
System.out.print("\n排序后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}
5.选择排序
- 从待排序序列中选出最小的元素排在第一个,然后在剩下的元素中又选出最小元素排在第二个,依次类推。直到全部排完为止。
public class selectSort {
public static void select_sort(int a[]) {
int min=0;
for(int i=0;i<a.length;i++) {
min=a[i];
for(int j=i;j<a.length;j++) {
if(a[j]<min) {int temp=min; min=a[j];a[j]=temp;}
}
a[i]=min;
}
}
public static void main(String[] args) {
int a[]={2,8,10,5,7,9,3,4,1,6};
System.out.print("排序前:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
select_sort(a);
System.out.print("\n排序后:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
}
}