java中的八种排序
来源:互联网 发布:数据分析能干什么 编辑:程序博客网 时间:2024/05/29 19:19
1.冒泡排序
public static int[] bubbleSort1(int[] array){
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length-1; j++) {
if (array[j]>array[j+1]) {
array[j]=array[j]^array[j+1];
array[j+1]=array[j+1]^array[j];
array[j]=array[j]^array[j+1];
}
}
System.out.println(Arrays.toString(array));
}
return array;
}
2.选择排序
public static int[] selectionSort(int[] array){
int mindex = 0;
boolean isHave = false;
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[mindex]) {
mindex = j;
isHave = true;
}
}
if (isHave) {
array[i] = array[i]^array[mindex];
array[mindex] = array[mindex]^array[i];
array[i] = array[i]^array[mindex];
}if (i <= array.length-2) {
mindex = i + 1;
}
isHave = false;
System.out.println(Arrays.toString(array));
}
return array;
}
3.归并排序
public static void mergeSort(int[] array){
//前一个有序组合
ArrayList<Integer> list01=new ArrayList<>();
//后一个有序组合
ArrayList<Integer> list02=new ArrayList<>();
//两个有序组合合并的结果
ArrayList<Integer> list03=new ArrayList<>();
for(int gap=1;gap<array.length;gap=gap*2){
for(int i=0;i<array.length;i++){
if(list01.size()<gap){
list01.add(array[i]);
}else
if(list02.size()<gap){
list02.add(array[i]);
}
if( (list01.size()==gap && list02.size()==gap) || (list01.size()==gap && list02.size()<gap && i==array.length-1) ){
//排序
switchArray(list01,list02,list03);
list01.clear();
list02.clear();
}
}
for(int j=0;j<list03.size();j++){
array[j]=list03.get(j);
}
list01.clear();
list02.clear();
list03.clear();
System.out.println(Arrays.toString(array));
}
}
4.基数排序
public static void radixSort(int[] array) {
int index=0;
for(int i=0;i<array.length;i++){
int length=String.valueOf(array[i]).length();
if(length>index){
index=length;
}
}
System.out.println(index);
//也可通过先找到最大值,最后转成string获取长度的方法
/*List<Integer> list=new ArrayList<Integer>();
List<Integer> list2=new ArrayList<Integer>();*/
List<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
for(int i=0;i<10;i++){
list.add(new ArrayList<Integer>());
}
//按照各个位数进行排序
for(int i = 0;i < index;i++){
for(int m=0;m<array.length;m++){
int a=array[m]/pow(i);
int b = a % 10;
list.get(b).add(array[m]);
}
System.out.println(list);
// 排序
int n=0;
for(ArrayList<Integer> arrayList : list){
if(arrayList.size() != 0){
for(Integer inner : arrayList){
array[n]=inner.intValue();
n++;
}
arrayList.clear();
}
}
System.out.println("--------"+Arrays.toString(array));
}
System.out.println(Arrays.toString(array));
}
4.堆排序
public static void switchArray(ArrayList<Integer> list1,ArrayList<Integer> list2,ArrayList<Integer> list3){
//System.out.println("list1");
int m=0;
int n=0;
while(m<list1.size() && n<list2.size()){
while(m<list1.size() && n<list2.size() && list1.get(m) < list2.get(n)){
//System.out.println("m==="+m);
list3.add(list1.get(m));
m++;
}
while(n<list2.size() && m<list1.size() && list1.get(m) >= list2.get(n)){
//System.out.println("n==="+n);
list3.add(list2.get(n));
n++;
}
}
while(m<list1.size()){
list3.add(list1.get(m));
m++;
}
while(n<list2.size()){
list3.add(list2.get(n));
n++;
}
}
6.快速排序
public static void quickfastSort(int[] array){
if(array.length > 0){
fastSort(array,0,array.length-1);
}
}
public static void fastSort(int[] array,int low ,int high ){
if(low < high){
int middle=findMiddle2(array,low,high);
fastSort(array, low, middle-1);
fastSort(array, middle+1, high);
}
}
public static int findMiddle(int[] array,int low ,int high){
int temp=array[low];
while(low<high){
while(low<high && temp<array[high]){
high--;
}
array[low]=array[high];
System.out.println("=--------"+Arrays.toString(array)+",low="+low+",high="+high);
while( low<high && temp>array[low]){
low++;
}
array[high]=array[low];
System.out.println("=+++++++++"+Arrays.toString(array)+",low="+low+",high="+high);
}
array[low]=temp;
System.out.println(Arrays.toString(array)+",low="+low+",high="+high);
System.out.println("loc="+low);
return low;
}
public static int findMiddle2(int[] array,int low ,int high){
int temp=array[low];
while(low<high){
while(temp<array[high]){
high--;
}
if(low<high){
array[low]^=array[high];
array[high]^=array[low];
array[low]^=array[high];
}
System.out.println("=--------"+Arrays.toString(array)+",low="+low+",high="+high);
while(temp>array[low]){
low++;
}
if(low<high){
array[high]^=array[low];
array[low]^=array[high];
array[high]^=array[low];
}
System.out.println("=+++++++++"+Arrays.toString(array)+",low="+low+",high="+high);
}
System.out.println(Arrays.toString(array)+",low="+low+",high="+high);
System.out.println("loc="+low);
return low;
}
7.插入排序
public static void insertSort(int[] array){
int j=0;
for(int i=1;i<array.length;i++){
int temp=array[i];
j=i-1;
while(j>=0 && temp<array[j]){
array[j+1]=array[j];
j--;
}
array[j+1] = temp;
System.out.println("---------"+Arrays.toString(array));
}
System.out.println(Arrays.toString(array));
}
8.希尔排序
public static void shellSort(int[] array){
int length=array.length;
int d=length/2;
while(d>=1){
int j=0;
for(int i=d; i<array.length; i++){
int temp=array[i];
j=i-d;
while(j>=0 && temp<array[j]){
array[j+d]=array[j];
j=j-d;
}
array[j+d] = temp;
System.out.println("---------"+Arrays.toString(array));
}
d=d/2;
}
}
}
- java中的八种排序
- java八种排序
- C#中的八种排序
- 八种排序java实现
- Java 八种排序算法比较实践
- Java八种常见排序算法
- java八种基本排序的实现
- 八种排序算法-Java实现
- 八种排序算法 Java、Python、C++实现 -- 插入排序
- 八种排序算法Java实现-希尔排序
- 八种排序算法Java实现-二分插入排序
- 八种排序算法Java实现-冒泡和选择排序
- 八种排序算法Java实现-快速排序
- 八种排序算法Java实现-堆排序
- 八种排序算法java实现(1)----冒泡排序
- Java中的八种运算符
- java中的八种基本类型
- java中的八种基本数据类型
- spingmvc简单上传文件笔记
- web前台环境配置
- L2-2. 链表去重
- nil、Nil、NULL、NSNull之间的区别
- 顺序表应用6:有序顺序表查询
- java中的八种排序
- Android 超好正则表达式工具类RegexUtil
- UI 增加热点区域
- ExpandableListView的使用
- Permisson Denied !ssh传输文件报错
- mysql 多表 update sql语句总结
- VS2013 配置 VLFeat
- HDU - 2795 Billboard
- 计算机图像分析、计算机视觉会议日历 日期备忘录Calendar of Computer Image Analysis, Computer Vision Conferences