3种排序算法

冒泡排序(Bubble Sort)

主要思想

冒泡排序是一种简单的排序算法,它可以将一组元素从小到大或从大到小排列。它的主要思想是通过重复地比较相邻的两个元素来排序,如果第一个元素比第二个元素大(或第一个元素比第二个元素小),则交换它们的位置。然后又比较一次下一对元素,重复这个过程,直到最后一对元素则完成排序。

在冒泡排序的过程中,比较次数是一个相对比较固定的值,要将所有元素排序,至少要进行n-1次比较(共有n个元素),最多要进行n^2/2次比较,因此冒泡排序的时间复杂度是O(N^2)。

实现代码

从小到大

#include<stdio.h>

int main()
{
	int numbers[10],t;
	printf("input 10 numbers:\n");
	for(int i=0;i<10;i++){
		scanf("%d",&numbers[i]);
	}
	for(int j=0;j<10;j++){
		for(int k=0;k<10;k++){
			if(numbers[j]<numbers[k]){
				t = numbers[j];
				numbers[j] = numbers[k];
				numbers[k] = t;
			}
		}
	}
	for(int i=0;i<10;i++){
		printf(" %d ",numbers[i]);
	}
	return 0;
}

从大到小

#include<stdio.h>

int main()
{
	int numbers[10],t;
	printf("input 10 numbers:\n");
	for(int i=0;i<10;i++){
		scanf("%d",&numbers[i]);
	}
	for(int j=0;j<10;j++){
		for(int k=0;k<10;k++){
			if(numbers[j]>numbers[k]){
				t = numbers[j];
				numbers[j] = numbers[k];
				numbers[k] = t;
			}
		}
	}
	for(int i=0;i<10;i++){
		printf(" %d ",numbers[i]);
	}
	return 0;
}

快速排序(Quick Sort)

主要思想

快速排序法是这五个排序方法中性能最好的算法,快速排序运用了分治思想和递归函数,所以快速排序也是这五个排序中最难的一个。

快速排序中要先找到一个目标值(target),然后将小于目标值的数放到嘴边,将大于目标值的数放到右边,然后重复以上操作,直到每个元素单独成为一部分。

实现代码

从小到大

# include <stdio.h>
void quickSort(int *number, int first, int last);

int main(){
	int numbers[10];
	printf("input 10 numbers:\n");
	for(int i=0;i<10;i++){
		scanf("%d",&numbers[i]);
	}
	quickSort(numbers,0,9);
	for(int j=0;j<10;j++){
		printf("  %d  ",numbers[j]);
	}
	return 0;
}

void quickSort(int *number, int first, int last) {
	int i, j, pivot;
	int temp;
	if (first<last) {
		pivot = first;
		i = first;
		j = last;
		while (i<j) {
			while (number[i] <= number[pivot] && i<last)
				i++;
			while (number[j]>number[pivot])
				j--;
			if (i<j) {
				temp = number[i];
				number[i] = number[j];
				number[j] = temp;
			}
		}
		temp = number[pivot];
		number[pivot] = number[j];
		number[j] = temp;
		quickSort(number, first, j - 1);
		quickSort(number, j + 1, last);
	}
}

从大到小

# include <stdio.h>
void quickSort(int *number, int first, int last);

int main(){
	int numbers[10];
	printf("input 10 numbers:\n");
	for(int i=0;i<10;i++){
		scanf("%d",&numbers[i]);
	}
	quickSort(numbers,0,9);
	for(int j=0;j<10;j++){
		printf("  %d  ",numbers[j]);
	}
	return 0;
}

void quickSort(int *number, int first, int last) {
	int i, j, pivot;
	int temp;
	if (first<last) {
		pivot = first;
		i = first;
		j = last;
		while (i<j) {
			while (number[i] >= number[pivot] && i<last)
				i++;
			while (number[j]<number[pivot])
				j--;
			if (i<j) {
				temp = number[i];
				number[i] = number[j];
				number[j] = temp;
			}
		}
		temp = number[pivot];
		number[pivot] = number[j];
		number[j] = temp;
		quickSort(number, first, j - 1);
		quickSort(number, j + 1, last);
	}
}

简单选择排序(Simple Selection Sort)

主要思想

设一组元素有n个元素,选择这n个元素中最小的一个与第一个元素交换位置,再在剩下的n-1个元素中选择最小的一个与第二个元素交换位置,直到在最后两个元素中选择最小的一个放在倒数第二的位置上,排序完成。

实现代码

从小到大

#include<stdio.h>

int main()
{
	int a[10],i,j,t;
	printf("input 10 numbers:\n");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<10;i++)
	{
		t=i;
		for(j=i+1;j<10;j++){
			if(a[t]>a[j])
			{
				t=j;
			}
		}
		int temp = a[i];
		a[i]=a[t];
		a[t]=temp;
	}
	for(i=0;i<10;i++){
		printf("%d",a[i]);
	}
  return 0;
}

从大到小

#include<stdio.h>

int main()
{
	int a[10],i,j,t;
	printf("input 10 numbers:\n");
	for(i=0;i<10;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<10;i++)
	{
		t=i;
		for(j=i+1;j<10;j++){
			if(a[t]<a[j])
			{
				t=j;
			}
		}
		int temp = a[i];
		a[i]=a[t];
		a[t]=temp;
	}
	for(i=0;i<10;i++){
		printf("%d",a[i]);
	}
  return 0;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容