0
点赞
收藏
分享

微信扫一扫

matlab--------矩阵的运算

林塬 2024-01-27 阅读 20

👻选择排序


选择排序的基本思想
每一趟(第i趟)在后面n-i+1(i=1,2,···,n-1)个待排序元素中 选取关键字最小的元素,作为有序子序列的第i个元素,直到n—1趟做完,待排序元素只剩下一个,就不用再选了。

🎡1、直接选择排序

直接选择排序是一种简单直观的排序算法。它的基本思想是每次从未排序的部分中找到最小(或最大)的元素,将其与未排序部分的第一个元素交换位置,然后缩小未排序部分的范围,继续进行选择和交换,直到整个序列有序。

如图
在这里插入图片描述
🪄代码示例

public static void selectSort(int[] array) {
	for (int i = 0; i < array.length; i++) {
    	int minIndex = i;
    	int j = i+1;
    	for (; j < array.length; j++) {
    		if(array[j] < array[minIndex]) {
    			minIndex = j;
        	}
        }
    	swap(array,i,minIndex);
    }
}
private static void swap(int[] array,int i,int j) {
	int tmp = array[j];
    array[j] = array[i];
    array[i] = tmp;
}

🎡2、堆排序

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆
在这里插入图片描述

如图
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
🪄代码示例:

 public static void heapSort(int[] array){
	//创建大根堆
    createHeap(array);
    int end = array.length-1;
    while (end > 0) {
    	swap(array,0,end);
        siftDown(array,0,end);
        end--;
    }
}

private static void createHeap(int[] array) {
	for (int parent = (array.length-1-1)/2; parent >= 0 ; parent--) {
		siftDown(array,parent,array.length);
	}
}

private static void siftDown(int[] array,int parent,int len) {
	int child = (2*parent)+1;
    while (child < len) {
    	if(child + 1 < len && array[child] < array[child+1]) {
        	child = child+1;
        }
        if(array[child] > array[parent]) {
            swap(array,child,parent);
            parent = child;
            child = 2*parent+1;
        }else {
            break;
        }
	}
}

private static void swap(int[] array,int i,int j) {
	int tmp = array[j];
    array[j] = array[i];
    array[i] = tmp;
}

🎉OK!今天的分享就到这里了,后面还会分享更多排序算法,敬请关注喔!!!✌️
在这里插入图片描述

举报

相关推荐

0 条评论