陣列元素劃分

GrittyB發表於2020-12-09

陣列元素劃分
選取陣列中的一個元素作為支點,分為兩個子集。左子集中的元素都不大於支點,右子集中的元素都不小於支點。

#include<stdio.h>
void sort(int a[], int n,int m);//劃分
void swap(int* a, int* b);//交換元素
void out(int a[], int n);//輸出
int main() {
	int a[5];
	int i = 0;
	int n = 5;
	int m;
	scanf_s("%d", &m);
	for (; i < n; i++)
		scanf_s("%d", &a[i]);
	sort(a, 5,m-1);
	out(a, 5);
}

void swap(int* a, int* b) {
	int temp = *b;
	*b = *a;
	*a = temp;
}
void sort(int a[], int n, int m) {
	int i = 0, j = n - 1;
	int start = m;
	for (; j >=start; j--) {

		if (a[start] > a[j]) {
			swap(&a[start], &a[j]);
			start=j;

			for (; i<=start; i++) {
				if (a[start] < a[i]) {
					swap(&a[start], &a[i]);
					start=i;
					break;
				}
			}
		}
	}
}

void out(int a[], int n) {
	int i = 0;
	n = 5;
	for (; i < n; i++)
		printf("%d\t", a[i]);
}

相關文章