排序算法总结
来源:互联网 发布:wps2009筛选重复数据 编辑:程序博客网 时间:2024/06/18 13:19
public class SortTest {
//打印数组
public void print(int[] array) {
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
System.out.println();
}
//以下两种方式为交换排序,第一种为冒泡排序,第二种为快速排序
//冒泡排序
public int[] bubbleSort(int[] array) {
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++) {
if(array[j]>array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
//快速排序,挖坑填数
private int getMiddle(int[] array,int low,int high) {
int key = array[low];
while(low<high) {
while(low<high && array[high]>key) {
high--;
}
array[low] = array[high];
while(low<high && array[low]<key) {
low++;
}
array[high] = array[low];
}
array[low] = key;
return low;
}
public int[] quikeSort(int[] array,int low,int high) {
//如果不加这个判断,递归会无法退出
if(low<high) {
int mid = this.getMiddle(array,low,high);
quikeSort(array,0,mid-1);
quikeSort(array,mid+1,high);
}
return array;
}
//以下两种方式为插入排序,一种是直接插入排序,另外一种是希尔排序
//直接插入排序
public int[] insertSort(int[] array) {
for(int i=1;i<array.length;i++) {
if(array[i]<array[i-1]) {
int j;
int temp = array[i];
array[i] = array[i-1];
for(j=i-1;j>=0 && array[j]>temp;j--) {
array[j+1] = array[j];
}
array[j] = temp;
}
}
return array;
}
//希尔排序
private void shellInsertSort(int[] array,int dk) {
for(int i=dk;i<array.length;i++) {
if(array[i]<array[i]) {
int j;
int temp = array[i];
array[i] = array[i-dk];
for(j=i-dk;j>=0&&array[j]>temp;j-=dk) {
array[j+dk] = array[j];
}
array[j] = temp;
}
}
}
public int[] shellSort(int[] array) {
int dk = array.length/2;
while(dk>=1) {
shellInsertSort(array,dk);
dk = dk/2;
}
return array;
}
//以下两种方式为选择排序,一种是简单的选择排序,另一种为堆排序
//简单选择排序
public int[] selectSort(int[] array) {
for(int i=0;i<array.length;i++) {
for(int j=i+1;j<array.length;j++) {
if(array[j]<array[i]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
return array;
}
//堆排序(看完二叉树之后补齐)
//以下一种方式是归并排序
//归并排序
//将两个有序序列合并array[first]~array[mid],array[mid+1]~array[last]
public void mergeArray(int[] a,int first,int mid,int last) {
int[] temp = new int[last-first+1];
int k = 0;
int i = first;
int j = mid+1;
while(i<=mid && j<=last) {
if(a[i]<=a[j]) {
temp[k++] = a[i++];
}
else {
temp[k++] = a[j++];
}
}
while(i<=mid) {
temp[k++] = a[i++];
}
while(j<=last) {
temp[k++] = a[j++];
}
for(int n=0;n<last-first+1;n++) {
a[first+n] = temp[n];
}
}
public int[] mergeSort(int[] array,int first,int last) {
int mid = (first+last)/2;
if(first<last) {
mergeSort(array,first,mid);
mergeSort(array,mid+1,last);
mergeArray(array,first,mid,last);
}
return array;
}
//主函数
public static void main(String[] args) {
int[] array = {9,8,7,6,5,4,3,2,1,0};
SortTest st = new SortTest();
int[] a = st.bubbleSort(array);
int[] b = st.quikeSort(array,0,array.length-1);
int[] c = st.insertSort(array);
int[] d = st.shellSort(array);
int[] e = st.selectSort(array);
int[] f = st.mergeSort(array,0,array.length-1);
st.print(a);
st.print(b);
st.print(c);
st.print(d);
st.print(e);
st.print(f);
}
}
//打印数组
public void print(int[] array) {
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
System.out.println();
}
//以下两种方式为交换排序,第一种为冒泡排序,第二种为快速排序
//冒泡排序
public int[] bubbleSort(int[] array) {
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++) {
if(array[j]>array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
//快速排序,挖坑填数
private int getMiddle(int[] array,int low,int high) {
int key = array[low];
while(low<high) {
while(low<high && array[high]>key) {
high--;
}
array[low] = array[high];
while(low<high && array[low]<key) {
low++;
}
array[high] = array[low];
}
array[low] = key;
return low;
}
public int[] quikeSort(int[] array,int low,int high) {
//如果不加这个判断,递归会无法退出
if(low<high) {
int mid = this.getMiddle(array,low,high);
quikeSort(array,0,mid-1);
quikeSort(array,mid+1,high);
}
return array;
}
//以下两种方式为插入排序,一种是直接插入排序,另外一种是希尔排序
//直接插入排序
public int[] insertSort(int[] array) {
for(int i=1;i<array.length;i++) {
if(array[i]<array[i-1]) {
int j;
int temp = array[i];
array[i] = array[i-1];
for(j=i-1;j>=0 && array[j]>temp;j--) {
array[j+1] = array[j];
}
array[j] = temp;
}
}
return array;
}
//希尔排序
private void shellInsertSort(int[] array,int dk) {
for(int i=dk;i<array.length;i++) {
if(array[i]<array[i]) {
int j;
int temp = array[i];
array[i] = array[i-dk];
for(j=i-dk;j>=0&&array[j]>temp;j-=dk) {
array[j+dk] = array[j];
}
array[j] = temp;
}
}
}
public int[] shellSort(int[] array) {
int dk = array.length/2;
while(dk>=1) {
shellInsertSort(array,dk);
dk = dk/2;
}
return array;
}
//以下两种方式为选择排序,一种是简单的选择排序,另一种为堆排序
//简单选择排序
public int[] selectSort(int[] array) {
for(int i=0;i<array.length;i++) {
for(int j=i+1;j<array.length;j++) {
if(array[j]<array[i]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
return array;
}
//堆排序(看完二叉树之后补齐)
//以下一种方式是归并排序
//归并排序
//将两个有序序列合并array[first]~array[mid],array[mid+1]~array[last]
public void mergeArray(int[] a,int first,int mid,int last) {
int[] temp = new int[last-first+1];
int k = 0;
int i = first;
int j = mid+1;
while(i<=mid && j<=last) {
if(a[i]<=a[j]) {
temp[k++] = a[i++];
}
else {
temp[k++] = a[j++];
}
}
while(i<=mid) {
temp[k++] = a[i++];
}
while(j<=last) {
temp[k++] = a[j++];
}
for(int n=0;n<last-first+1;n++) {
a[first+n] = temp[n];
}
}
public int[] mergeSort(int[] array,int first,int last) {
int mid = (first+last)/2;
if(first<last) {
mergeSort(array,first,mid);
mergeSort(array,mid+1,last);
mergeArray(array,first,mid,last);
}
return array;
}
//主函数
public static void main(String[] args) {
int[] array = {9,8,7,6,5,4,3,2,1,0};
SortTest st = new SortTest();
int[] a = st.bubbleSort(array);
int[] b = st.quikeSort(array,0,array.length-1);
int[] c = st.insertSort(array);
int[] d = st.shellSort(array);
int[] e = st.selectSort(array);
int[] f = st.mergeSort(array,0,array.length-1);
st.print(a);
st.print(b);
st.print(c);
st.print(d);
st.print(e);
st.print(f);
}
}
阅读全文
0 0
- 算法--排序算法总结
- 算法:排序算法总结
- 算法:排序算法总结
- 算法-排序算法总结
- 算法-排序算法总结
- 【排序算法】排序算法总结
- 排序算法总结---希尔排序
- 排序算法总结---冒泡排序
- 排序算法总结----快速排序
- 排序算法总结---希尔排序
- 排序算法总结【内排序】
- 排序算法之内排序总结
- 排序算法总结:冒泡排序
- 【排序算法总结】冒泡排序
- 【排序算法总结】选择排序
- 排序算法总结
- 排序算法大总结
- 排序算法总结
- JQuery
- 神经网络与深度学习笔记(三)python 实现反向传播算法
- Terark面试总结
- HDU3265 Posters(线段树+扫描线——面积交)
- Tokenizer类的框架
- 排序算法总结
- 前端常用网站
- 求次数
- Eclipse Oxygen集成的Gradle的使用
- java读取xml
- J2ME开发新手九大入门要点
- GreenDao学习
- HDU6076(dp+记忆化搜索+hash)
- mapreduce程序本地模式调试