zoukankan      html  css  js  c++  java
  • 几种常见的排序方法(日常积累)

    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

  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12781617.html
Copyright © 2011-2022 走看看