1. 程式人生 > 其它 >【C語言】陣列排序方法總結

【C語言】陣列排序方法總結

技術標籤:c語言

一.氣泡排序
相鄰元素兩兩比較,按照要求交換位置,n個元素一共要比較n-1趟,每趟要兩兩比較未排序元素個數-1次。

#include<stdio.h>

void bubble_sort(int* p, int len)//函式實現
{
	int i = 0;
	int j = 0;
	for (i = 0; i < len - 1; i++)//需要進行len-1趟
	{
		int flag = 1;//flag=1,說明已經排好序
		for (j = 0; j < len - 1 - i;j++)//每趟兩兩比較較未排好序元素個數-1次。
		{
			if (
p[j] > p[j+1]) { int tmp = p[j]; p[j] = p[j + 1]; p[j + 1] = tmp; flag = 0; } } if (flag==1)//判斷是否排好序 break; } } int main() { int arr[] = { 1,5,9,11,46,79,12 }; int sz = sizeof arr / sizeof arr[0]; bubble_sort(arr,sz); int i = 0; for (i = 0; i < sz; i++) { printf
("%d ", arr[i]); } return 0; }

在這裡插入圖片描述

二.選擇排序
從小到大排序,拿第一個位置的元素去和後面的元素比,找到最小的,二者位置上的元素進行交換,在拿第二個位置的元素和後面的比,以此類推。

#include<stdio.h>

void selection_sort(int* p, int len)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < len - 1; i++)
	{
		int index = i;
		for (j = i + 1; j < len; j++)
		{
			if
(p[index] > p[j]) index = j; } if (index != i) { int tmp = p[index]; p[index] = p[i]; p[i] = tmp; } } } int main() { int arr[] = { 11,55,1,6,89,23 }; int sz = sizeof arr / sizeof arr[0]; selection_sort(arr, sz); int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }

在這裡插入圖片描述
三.快速排序

標頭檔案:stdlib.h
結構:void qsort(陣列名,陣列長度,陣列元素大小,自定義的函式cmp)

1.對int型別陣列排序

int arr[10];

sample:

int cmp(const void* a,const void* b)
{
return * (int*)a- * (int*)b;
}

qsort(arr, 10, sizeof(arr[0]), cmp);

#include<stdio.h>
#include<stdlib.h>

int cmp(const void* a, const void* b)
{
	return *(int*)a - *(int*)b;//這是順序排列,若改為* (int*)b- * (int*)a就是逆序排列(下同
}

int main()
{
	int arr[] = { 15,3,47,59,13,2,1 };
	int sz = sizeof arr / sizeof arr[0];
	qsort(arr, sz, sizeof arr[0], cmp);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

在這裡插入圖片描述

2.對double型別陣列排序

double arr[10];

sample:

int cmp(const void* a,const void* b)
{
return * (double* )a>* (double*)b ? 1:-1
}

qsort(arr,10,sizeof(arr[0]),cmp);

#include<stdlib.h>
#include<stdio.h>

void cmp(const void* a, const void* b)
{
	return *(double*)a > *(double*)b ? 1 : -1;
}

int main()
{
	double arr[] = { 6.6 ,1.1,3.3,5.5,7.7};
	int sz = sizeof arr / sizeof arr[0];
	qsort(arr, sz, sizeof arr[0], cmp);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%f ", arr[i]);
	}
	return 0;
}

在這裡插入圖片描述