设为首页 加入收藏

TOP

冒泡、插入、归并、堆排序、快速排序的Java实现代码(一)
2015-07-16 12:57:18 来源: 作者: 【 】 浏览:13
Tags:冒泡 插入 归并 排序 快速 Java 实现 代码

冒泡、插入、归并、堆排序、快速排序的Java实现代码,详细过程就不表了,看代码吧


import java.util.Arrays;


public class Sort {


? ?
? ? static int swapTimes=0;
? ? public static void main(String[] args) {
? ? ? ? int[] numbers = { 7, 6, 5, 3, 1, 8, 9, 7, 1, 2 ,5};
? ? ? ? //*** BubbleSort Test ***
? ? ? ? //bubbleSort(numbers);
? ? ? ?
? ? ? ? //*** InsertSort Test ***
? ? ? ? //insertSort(numbers);
? ? ? ?
? ? ? ? //*** MergeSort Test ***
? ? ? ? //mergeSort(numbers);
? ? ? ?
? ? ? ? //*** HeapSort Test ***
? ? ? ? //heapSort(numbers);
? ? ? ?
? ? ? ? //*** QuickSort Test ***
? ? ? ?
? ? ? ? quickSort(numbers);
? ? ? ? System.out.println("result:"+Arrays.toString(numbers));


? ? }


? ? /*
? ? * 插入排序
? ? */
? ? public static void insertSort(int[] numbers) {
? ? ? ? System.out.println("InsertSort:"+Arrays.toString(numbers));
? ? ? ? if (numbers == null) {
? ? ? ? ? ? System.out.println("Invalid input!");
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? for (int i = 1; i < numbers.length; i++) {
? ? ? ? ? ? int temp=numbers[i];
? ? ? ? ? ? int j=i-1;
? ? ? ? ? ? for (; j >= 0&&numbers[j]>temp; j--) { //这个数大于比较数,就把这个数右移
? ? ? ? ? ? ? ? numbers[j + 1] = numbers[j];
? ? ? ? ? ? ? ? System.out.println(Arrays.toString(numbers)+"---temp="+temp);
? ? ? ? ? ? }
? ? ? ? ? ? numbers[j+1]=temp;? ? //把比较数赋值到正确位置
? ? ? ? ? ? System.out.println(Arrays.toString(numbers));
? ? ? ? }
? ? }


? ? /*
? ? * 冒泡排序
? ? */
? ? public static void bubbleSort(int[] numbers) {
? ? ? ? System.out.println("BubbleSort:");
? ? ? ? if (numbers == null) {
? ? ? ? ? ? System.out.println("Invalid input!");
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? for (int i = numbers.length - 1; i > 0; i--) {
? ? ? ? ? ? for (int j = 0; j < i; j++) {
? ? ? ? ? ? ? ? if (numbers[j] > numbers[j + 1]) {
? ? ? ? ? ? ? ? ? ? swap(numbers, j, j + 1);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? System.out.println("result:");
? ? }
? ? /*
? ? * 归并排序
? ? */
? ? public static void mergeSort(int[] numbers){
? ? ? ? if(numbers==null){
? ? ? ? ? ? System.out.println("Invalid input!");
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? mergeSort(numbers,0,numbers.length-1);
? ? }
? ?
? ? private static void mergeSort(int[] numbers, int start, int end) {
? ? ? ? if(start>=end){
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? int mid=(start+end)>>1;
? ? ? ? mergeSort(numbers, start, mid);
? ? ? ? mergeSort(numbers, mid+1, end);
? ? ? ? merge(numbers,start,mid,end);
? ? ? ? System.out.println(Arrays.toString(numbers)+"---mid="+mid);
? ? }
? ? /*
? ? * 合并两个有序数组
? ? */
? ? private static void merge(int[] numbers, int start, int mid, int end) {
? ? ? ? int leftLength=mid-start+1;
? ? ? ? int rightLength=end-mid;
? ? ? ? int[] leftNumbers=new int[leftLength];
? ? ? ? int[] rightNumbers=new int[rightLength];
? ? ? ? for (int i = 0; i < leftLength; i++) {//将左边的元素赋给left数组
? ? ? ? ? ? leftNumbers[i]=numbers[start+i];
? ? ? ? }
? ? ? ? for (int j = 0; j < rightLength; j++) {//同理
? ? ? ? ? ? rightNumbers[j]=numbers[mid+j+1];
? ? ? ? }
? ? ? ? int pLeft=0;
? ? ? ? int pRight=0;
? ? ? ? for(int index=start;index<=end;index++){//开始merge左右数组
? ? ? ? ? ? if(pLeft==leftLength){? ? //当left数组合并完了,就直接赋值right数组
? ? ? ? ? ? ? ? numbers[index]=rightNumbers[pRight++];
? ? ? ? ? ? }else if(pRight==rightLength){
? ? ? ? ? ? ? ? numbers[index]=leftNumbers[pLeft++];
? ? ? ? ? ? }else{? ? ? ? //左右数组都没赋值完,就要比较大小
? ? ? ? ? ? ? ? if(leftNumbers[pLeft]<=rightNumbers[pRight]){
? ? ? ? ? ? ? ? ? ? numbers[index]=leftNumbers[pLeft++];
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? numbers[index]=rightNumbers[pRight++];
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? /*
? ? * 堆排序
? ? */
? ? public static void heapSort(int[] numbers){
? ? ? ? if(numbers==null){
? ? ? ? ? ? System.out.println("Invalid input!");
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? int[] heap=buildHeap(numbers);? ? //构造小顶堆
? ? ? ? System.out.println("build Heap:"+Arrays.toString(heap));
? ? ? ? int index=0;
? ? ? ? while(!isHeapEmpty(heap)){
? ? ? ? ? ? //注意,这里不能在前面的index++,因为会先算左括号内的++,造成传入的index+1
? ? ? ? ? ? numbers[index]=pop

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java编程:组合、继承和代理的区别 下一篇Linux进程之Fork函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: