当前位置:   article > 正文

排序算法。

排序算法。
***冒泡排序:

基本:

  1. private static void sort(int[] a){
  2. for (int i = 0; i < a.length-1; i++) {
  3. for (int j = 0; j < a.length-i-1; j++) {
  4. if (a[j]>a[j+1]){
  5. swap(a,j,j+1);
  6. }
  7. }
  8. }
  9. }
  10. private static void swap(int[] a,int i,int j){
  11. int temp=a[i];
  12. a[i]=a[j];
  13. a[j]=temp;
  14. }

优化一:
 

  1. private static void sort2(int[] a){
  2. for (int i = 0; i < a.length-1; i++) {
  3. boolean swapped=false;
  4. for (int j = 0; j < a.length-i-1; j++) {
  5. if (a[j]>a[j+1]){
  6. swap(a,j,j+1);
  7. swapped=true;
  8. }
  9. }
  10. if (!swapped){
  11. break;
  12. }
  13. }
  14. }
  15. private static void swap(int[] a,int i,int j){
  16. int temp=a[i];
  17. a[i]=a[j];
  18. a[j]=temp;
  19. }

优化二:
 

  1. private static void sort1(int[] a){
  2. int n=a.length-1;
  3. while (true){
  4. int last=0;
  5. for (int j = 0; j <n; j++) {
  6. if (a[j]>a[j+1]){
  7. swap(a,j,j+1);
  8. last=j;
  9. }
  10. }
  11. n=last;
  12. if (n==0){
  13. break;
  14. }
  15. }
  16. }
  17. private static void swap(int[] a,int i,int j){
  18. int temp=a[i];
  19. a[i]=a[j];
  20. a[j]=temp;
  21. }
*****选择排序:

将数组划分为有序和无序,每一轮都选择一个最小的值加入到已排序部分。

  1. private static void sort1(int[] a){
  2. for (int i = 0; i < a.length; i++) {
  3. int minIndex=i;
  4. for (int j = i+1; j <a.length; j++) {
  5. if (a[minIndex]>a[j]){
  6. minIndex=j;
  7. }
  8. }
  9. if (minIndex!=i){
  10. swap(a,minIndex,i);
  11. }
  12. }
  13. }
  14. private static void swap(int[] a,int i,int j){
  15. int temp=a[i];
  16. a[i]=a[j];
  17. a[j]=temp;
  18. }

插入排序
 
  1. //插入排序
  2. private static void sort(int[] a){
  3. //i为待插入元素
  4. for (int i = 1; i < a.length; i++) {
  5. int t=a[i];
  6. for (int j = i-1; j>=0; j--) {
  7. if (a[j] > t) {
  8. a[j + 1] = a[j];
  9. } else {
  10. a[j + 1] = t;
  11. break;
  12. }
  13. }
  14. }
  15. }
希尔排序:插入排序的优化版本

希尔排序是一种基于插入排序的排序算法,也称为缩小增量排序。它通过将待排序的数组分割成若干个子序列,分别对每个子序列进行插入排序,最后再对整个数组进行一次插入排序。

具体步骤如下:
1. 选择一个增量序列,通常为n/2、n/4、n/8等,依次对数组进行分组。
2. 对每个分组进行插入排序。
3. 逐渐减小增量,重复步骤2,直到增量为1。
4. 最后对整个数组进行一次插入排序。

希尔排序的时间复杂度取决于增量序列的选择,通常情况下为O(n log n)。相比于插入排序,希尔排序在大规模数据的排序中效率更高。
 

9,23,19,18,23,15->9,15, 19,18,23,23->9,15,18,19,23,23

****快速排序:

单边快排:选择最右侧元素为基准点元素,从左向右找一个比基准点元素大的元素,交换,然后从右向左找一个比基准点小的元素。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/470459
推荐阅读
相关标签
  

闽ICP备14008679号