算法示例C/Java(长期更新)

C语言算法

Java算法

        int[] arr = { 2, 0, 1, 0, 2, 1, 2, 0, 1, 2, 0, 1 };
		// 0~i表示0元素的区间,k~n-1表示2的元素区间,中间是1的元素区间
		int i = -1;
		int k = arr.length;
		int j = 0;
		while (j < k) {
			if (arr[j] == 0) {
				i++;
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
				j++;
			} else if (arr[j] == 2) {
				k--;
				int temp = arr[k];
				arr[k] = arr[j];
				arr[j] = temp;
			} else {
				j++;
			}
		}
		for (int m = 0; m < arr.length; m++) {
			System.out.println(arr[m]);
		}
         /**
		 * arr[0]号位的数据需要提前记录,位置交换时该位置的值不会被覆盖。
		 */
		int[] arr = { 3, 0, 1, 2, 5, 1, 7, 8, 4, 6, 9 };
		int pivot = arr[0];
		
		int i = 0;
		int j = arr.length - 1;
		while (i < j) {
			while (i < j && arr[j] > pivot) {// 从后往前扫描,找到<=pivot的值后跳出循环
				j--;
			}
			while (i < j && arr[i] <= pivot) {// 从前往后扫描,找到>pivot的值时跳出循环
				i++;
			}
			if (i < j) {// 如果找到满足前两步的情况,此时i<j,交换值
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
		// 所有循环结束,交换初始位置和索引到的j位置的值
		int temp = arr[0];
		arr[0] = arr[j];
		arr[j] = temp;
		for (int m = 0; m < arr.length; m++) {
			System.out.println(arr[m]);
		}
        /**
		 * arr[0]号位的数据需要提前记录,位置交换时该位置的值会被覆盖。
		 */
		int[] arr = { 3, 0, 1, 2, 5, 1, 7, 8, 4, 6, 9 };
		int pivot = arr[0];
		int i = 0;
		int j = arr.length - 1;
		while (i < j) {
			while (j > i && arr[j] > pivot) {//
				j--;
			}
			arr[i] = arr[j];// 从后往前检索,arr[i](arr[0])为空位,将arr[j]值移动到arr[i]后,arr[j]为空位
			while (i < j && arr[i] <= pivot) {
				i++;
			}
			arr[j] = arr[i];// 从前往后检索,arr[j]此时为空位,将arr[i]值移动到arr[j]后,arr[i]为空位
		}
		arr[i] = pivot;// 将arr[0]值移动到空位所在的地址
		for (int m = 0; m < arr.length; m++) {
			System.out.println(arr[m]);
		}

我相信每个赤诚忠厚的孩子,都曾在心底向父母许下“孝”的宏愿,相信来日方长,相信水到渠成,相信自己必有功成名就衣锦还乡的那一天,可以从容尽孝。可惜人们忘了,忘了时间的残酷,忘了人生的短暂,忘了世上有永远无法报答的恩情,忘了生命本身不堪一击的脆弱。时间是一只藏在黑暗中的温柔的手,在你一出神一恍惚之间,物走星移。聚散有定期,在时间的洪流里,有些爱错过就是一生。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页