简单的数组排序、反转

好久没写了,是啊!好长时间了,那今天来点干货吧!(或许太简单了),笔者是有点忘记,又拿出来写了一遍,也就凑合看下吧!

一些关于数组基本的排序,反转等,写的不全啊,是啊,脑子记不住了

 

package com.wanghang.sort;

import java.util.Arrays;
import java.util.Random;

/**
 * 排序等
 *
 * @author Hang.W
 * @version 1.0, 2017-01-23 11:30:53
 */
public class Sort {

	public static void main(String[] args) {
		
		int[] arr = {9, 7, 5, 3, 1, 8, 6, 4, 2, 0};
		bubbleSort(arr);
		System.out.println("冒泡法:" + Arrays.toString(arr));
		
		reverse(arr);
		System.out.println("反 转:" + Arrays.toString(arr));
		
		insertSort(arr);
		System.out.println("插入法:" + Arrays.toString(arr));
		
		shuffle(arr);
		System.out.println("洗牌法:" + Arrays.toString(arr));
		
		printDiamond();
		
		printTriangle(6);
		
		String new_str = reverse("Monkey D Luffy");
		System.out.println("反转后的字符串:" + new_str);
	}
	
	/**
	 * 冒泡排序
	 * 
	 * @param arr 待排序的数组
	 */
	public static void bubbleSort(int[] arr) {
		for (int i = 0; i < arr.length - 1; i++) {
			for (int j = 0; j < arr.length - i - 1; j++) {
				if(arr[j] > arr[j + 1]) {
					int temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
	}
	
	/**
	 * 插入排序
	 * 
	 * @param arr
	 */
	public static void insertSort(int[] arr) {
		for (int i = 1; i < arr.length; i++) {
			for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
				int temp = arr[j + 1];
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
		}
	}
	
	/**
	 * 洗牌法
	 * 
	 * @param arr
	 */
	public static void shuffle(int[] arr) {
		Random random = new Random();
		for(int i = arr.length - 1; i >= 1; i--) {
			int j = random.nextInt(i);
			int temp = arr[i];
			arr[i] = arr[j];
			arr[j] = temp;
		}
	}
	
	/**
	 * 数组反转
	 * 
	 * @param arr
	 */
	public static void reverse(int[] arr) {
		for(int start = 0, end = arr.length - 1; start < end; start++, end--) {
			int temp = arr[start];
			arr[start] = arr[end];
			arr[end] = temp;
		}
	}
	
	/**
	 * 菱形
	 */
	public static void printDiamond() {
		// 打印4行
		for (int y = 1; y <= 4; y++) {
			// 每行开头空格
			for(int x = 1; x <= 4 - y; x++) {
				System.out.print(" ");
			}
			// 空格后接*
			for(int z = 1; z <= 2 * y - 1; z++) {
				System.out.print("*");
			}
			System.out.println();
		}
		
		// 打印4行,最后一行只有空格,没有*
		for(int y = 4; y >= 1; y--) {
			for(int x = 1; x <= 5 - y; x++) {
				System.out.print(" ");
			}
			for(int z = 1; z <= 2 * y - 3; z++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	/**
	 * 打印杨辉三角
	 * 
	 * @param n
	 */
	public static void printTriangle(int n) {
		int[][] arr = new int[n][n];
		for (int i = 0; i < arr.length; i++) {
			arr[i][0] = 1;
			arr[i][i] = 1;
		}
		
		// 每行的元素等于同列上一行的元素加上同列上一行的元素的前一个元素之和
		for(int y = 2; y < arr.length; y++) {
			for(int x= 1; x < arr[y].length - 1; x++) {
				arr[y][x] = arr[y - 1][x] + arr[y - 1][x - 1];
			}
		}
		
		// 打印二维数组
		for(int y = 0; y < arr.length; y++) {
			for(int x = 0; x <= y; x++) {
				System.out.print(arr[y][x] + "\t");
			}
			System.out.println();
		}
	}
	
	/**
	 * 递归实现字符串反转
	 * 
	 * @param str 目标字符串
	 * @return 反转后的字符串
	 */
	public static String reverse(String str) {
		if(str == "" || str.length() == 1)
			return str;
		// 每次获取第一个元素追加到新字符串的最后
		return reverse(str.substring(1)) + str.charAt(0);

	}
}

 

运行结果:

继续努力哈!

想去总结下这个Hibernate的Dao层的通用模板(敬请期待吧)!
 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的问题是计算一个数组计数和排序距离。我假设你的排序距离是指数组与其按升序排序后的数组之间的距离。那么这个问题可以使用归并排序来解决。在归并排序中,当合并两个已排序的子数组时,我们可以计算计数,并将其添加到结果中。同时,我们可以在合并时记录每个元素的位置变化,从而计算排序距离。下面是一个C++实现: ```cpp #include <iostream> #include <vector> using namespace std; int merge(vector<int>& arr, int start, int mid, int end, vector<int>& temp) { int i = start, j = mid + 1, k = 0, count = 0; while (i <= mid && j <= end) { if (arr[i] <= arr[j]) { temp[k++] = arr[i++]; } else { count += (mid - i + 1); temp[k++] = arr[j++]; } } while (i <= mid) { temp[k++] = arr[i++]; } while (j <= end) { temp[k++] = arr[j++]; } for (int i = start, k = 0; i <= end; i++, k++) { arr[i] = temp[k]; } return count; } int mergeSort(vector<int>& arr, int start, int end, vector<int>& temp) { if (start >= end) { return 0; } int mid = (start + end) / 2; int count = mergeSort(arr, start, mid, temp) + mergeSort(arr, mid + 1, end, temp) + merge(arr, start, mid, end, temp); int i = start, j = mid + 1, k = 0; while (i <= mid && j <= end) { if (arr[i] <= arr[j]) { temp[k] = arr[i]; i++; } else { temp[k] = arr[j]; j++; } k++; } while (i <= mid) { temp[k] = arr[i]; i++; k++; } while (j <= end) { temp[k] = arr[j]; j++; k++; } for (int i = start, k = 0; i <= end; i++, k++) { arr[i] = temp[k]; } return count; } int reverseCount(vector<int>& arr) { int n = arr.size(); vector<int> temp(n); return mergeSort(arr, 0, n - 1, temp); } int sortDistance(vector<int>& arr) { int n = arr.size(); vector<int> sortedArr(n); for (int i = 0; i < n; i++) { sortedArr[i] = arr[i]; } sort(sortedArr.begin(), sortedArr.end()); int distance = 0; for (int i = 0; i < n; i++) { int j = i; while (j < n && sortedArr[j] != arr[i]) { j++; } if (j == n) { // Element not found in sorted array return -1; } distance += abs(j - i); } return distance; } int main() { vector<int> arr = {2, 4, 1, 3, 5}; int reverseCount = reverseCount(arr); cout << "Reverse count: " << reverseCount << endl; int sortDistance = sortDistance(arr); cout << "Sort distance: " << sortDistance << endl; return 0; } ``` 上面的代码中,`merge`函数用于计算计数并合并两个子数组,`mergeSort`函数用于归并排序整个数组,并返回计数,`reverseCount`函数简单地调用`mergeSort`函数。`sortDistance`函数计算给定数组与其按升序排序后的数组之间的距离。在主函数中,我们可以看到如何使用这两个函数来计算给定数组计数和排序距离。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值