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

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

原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12781617.html