• 几种常见的排序方法(日常积累)


    1、冒泡排序

    思路:外层循环从1到n-1,内循环从当前外层的元素的下一个位置开始,依次和外层的元素比较,出现逆序就交换,通过与相邻元素的比较和交换来把小的数交换到最前面。

    for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
          for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
            if(arr[j]>arr[j+1]){
              int temp=arr[j];
              arr[j]=arr[j+1];
              arr[j+1]=temp;
            }
          }
        }
    

    2、选择排序

    思路:冒泡排序是通过相邻的比较和交换,每次找个最小值。选择排序是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

    private static void sort(int[] array) {
            int n = array.length;
            for (int i = 0; i < n-1; i++) {
                int min = i;
                for (int j = i+1; j < n; j++) {
                    if (array[j] < array[min]){//寻找最小数
                        min = j;                      //将最小数的索引赋值
                     }  
                }
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
    
            }
        }
    

    3、交换排序

    void Changesort (int array[],int n)
    {
        int i, j, temp;
        for(i=0; i<n-1; i++)
        {
            for(j=i+1; j<n; j++)
            {
                if(array[j] < array[i])//从低到高,升序排列
                {
                    temp=array[j];
                    array[j]=array[i];
                    array[i]=temp;
                 }
            }
        }
    }
    

    4、qsort函数

    void qsort(void * base, size_num, size_t size, int (*compare)(const void* ,const void *)
    第一个参数是所要排序的数组,第二个是数组大小(元素个数),第三个参数是每个元素所占的字节,第四个元素是比较函数。

    比较整数

    #include<stdlib.h>  
    #include<stdio.h>
    int compare(const void*a,const void *b)
    {
    	int *pa=(int*)a;
    	int *pb=(int*)b;
    	int num1 =*pa;
    	int num2 =*pb;
    	if(num1-num2>0)return 1;//从小到大排序
    	else if( num1-num2<0) return -1; 
    	
    }
    int main()
    {
    	int a[N];
    	qsort (a, N, sizeof(a[0]), compare);
    	return 0;
    }
    

    (比较小数类似,只需把int类型换成float或double,比较结构体同理)
    其他方法参考>https://www.cnblogs.com/flyingdreams/p/11161157.html

  • 相关阅读:
    JAVA 字符处理
    android:visibility 隐藏 可见 不可见
    Android中 int 和 String 互相转换的多种方法
    日期月和日补零
    【程序】程序报错 error:-1610149839 等大负数
    【IE】将IE11改为64位
    【linux】CentOS网络配置
    【linux】CentOS虚拟机eth0 提示Device does not seem to be present
    【SUSE】关闭防火墙
    【走马观花】十月八日通州雾
  • 原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12781617.html
Copyright © 2020-2023  润新知