首页 / 算法 / 简单排序,冒泡排序,鸡尾酒排序,快速排序
简单排序,冒泡排序,鸡尾酒排序,快速排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了简单排序,冒泡排序,鸡尾酒排序,快速排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3004字,纯文字阅读大概需要5分钟。
内容图文
![简单排序,冒泡排序,鸡尾酒排序,快速排序](/upload/InfoBanner/zyjiaocheng/1250/be0ea8bf3d1f41a786fb36ad7a7aa0b4.jpg)
简单排序:每次找出最大(小)的数,从头开始依次排序。
1 public static int[] simplySort(int a[]) { 2for (int i = 0; i < a.length - 1; i++) { 3// int min = a[i]; 4int minIndex = i; 5for (int j =i + 1; j < a.length; j++) { 6//我的代码 7// if (a[j] < min) { 8// min = a[j]; 9// minIndex = j; 10// } 11//老师代码12if (a[j] < a[minIndex]) { 13 minIndex = j; 14 } 15 } 16// int m = a[i]; 17// a[i] = a[minIndex]; 18// a[minIndex] = m;19if (i != minIndex) {
//"^"求异或 20 a[i] = a[i] ^ a[minIndex]; 21 a[minIndex] = a[i] ^ a[minIndex]; 22 a[i] = a[i] ^ a[minIndex]; 23 } 2425 } 26return a; 27 }
冒牌排序:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1 publicint[] getSort(int[] array) { 2 boolean swapped = true; //循环控制 3 for (int i = 0; swapped && i < array.length - 1; i++) { 4 swapped = false; 5 for (int j = 0; j < array.length - i-1; j++) { 6 if (array[j] > array[j+1]) { 7 int temp = array[j]; 8 array[j] = array[j+1]; 9 array[j+1] = temp; 10 swapped = true;//当没有做交换的时候,也就是说数列已经是有序的了,就不做循环了 11 } 12 } 13 } 14 return array; 15 }
鸡尾酒排序:
与冒泡排序不同的地方:
鸡尾酒排序等于是冒泡排序的轻微变形。不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。
以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问一次序列就可以完成排序,但如果使用冒泡排序则需要四次。
复杂度:
鸡尾酒排序最糟或是平均所花费的次数都是O(n^2),但如果序列在一开始已经大部分排序过的话,会接近O(n)。
1 public static int[] cocktailSort(int[] a) { 2for (int i = 0; i < a.length / 2; i++) { 3for (int j = 0; j < a.length - i - 1; j++) { 4if (a[j] > a[j + 1]) { 5int tem = a[j]; 6 a[j] = a[j + 1]; 7 a[j + 1] = tem; 8 } 9 } 10for (int j = a.length - i - 1; j > 0; j--) { 11if (a[j] < a[j - 1]) { 12int tem = a[j]; 13 a[j] = a[j - 1]; 14 a[j - 1] = tem; 15 } 16 } 17 } 18return a; 19 }
快速排序:是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
具体步骤:
1 public static int[] quickSort(int[] a, int start,int end) { 2int low = start; 3int high = end; 4int pivot = a[low]; 5while (low < high) { 6while (low < high && a[high] >= pivot) { 7 high--; 8 } 9if (low < high && a[high] < pivot) { 10int tem = a[low]; 11 a[low] = a[high]; 12 a[high] = tem; 13 low++; 14 } 15while (low < high && a[low] < pivot) { 16 low++; 17 } 18if (low < high && a[low] >= pivot) { 19int tem = a[low]; 20 a[low] = a[high]; 21 a[high] = tem; 22 high--; 23 } 24 } 25if (low - 1 > start) { 26 quickSort(a, start, low - 1); 27 } 28if (high + 1 < end) { 29 quickSort(a, low + 1, end); 30 } 3132return a; 33 }
原文:http://www.cnblogs.com/f644135318/p/4052553.html
内容总结
以上是互联网集市为您收集整理的简单排序,冒泡排序,鸡尾酒排序,快速排序全部内容,希望文章能够帮你解决简单排序,冒泡排序,鸡尾酒排序,快速排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。