數據結構中的排序--快速排序

快速排序可以先參考:https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/369842?fr=aladdin

#include "stdafx.h"
#include <iostream>
using namespace std;

void print(int data[], int n)
{
	for (int i = 0; i < n; i++)
	{
		cout << data[i] << " ";
	}
	cout << endl;
}

void quick_ascending_sort(int data[], int len, int low, int high)
{
	int i = 0, j = 0, temp = 0, d = 0;

	if (low >= high)
	{
		return;
	}
	temp = data[low];
	i = low;
	j = high;
	while (i < j)
	{
		/*比temp小的元素移到低端*/
		while (i < j && data[j] >= temp)//
			j--;
		if (i < j)
			data[i++] = data[j];
		/*比temp大的元素移到高端*/
		while (i < j && data[i] <= temp)
			i++;
		if (i < j)
			data[j--] = data[i];
	}
	data[i] = temp;
	cout << "temp:" << temp<< " : ";
	print(data, len);
	quick_ascending_sort(data, len, low, i - 1);
	quick_ascending_sort(data, len, i + 1, high);
}



void quick_desending_sort(int data[], int low, int high)
{
	int i = 0, j = 0, temp = 0, d = 0;

	if (low >= high)
	{
		return;
	}
	temp = data[low];
	i = low;
	j = high;
	while (i < j)
	{
		while (i < j && data[j] < temp)
			j--;
		if (i < j)
			data[i++] = data[j];

		while (i < j && data[i] > temp)
			i++;
		if (i < j)
			data[j--] = data[i];
	}
	data[i] = temp;
	quick_desending_sort(data, low, i - 1);
	quick_desending_sort(data, i + 1, high);
}


int main()
{
	int num[] = {5,3, 7,4,3,9,6,2,10,4,3,7,1};
	int len = sizeof(num) / sizeof(int);

	cout << "data count:"<< len << ".  before sort: ";
	print(num, len);

	quick_ascending_sort(num, len, 0, len -1);
	cout << "after ascending sort: ";
	print(num, len);

	quick_desending_sort(num, 0, len -1);
	cout << "after desending sort: ";
	print(num, len);

	return 0;
}

 測試結果

data count:13.  before sort: 5 3 7 4 3 9 6 2 10 4 3 7 1
temp:5 : 1 3 3 4 3 4 2 5 10 6 9 7 7
temp:1 : 1 3 3 4 3 4 2 5 10 6 9 7 7
temp:3 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:2 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:3 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:4 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:10 : 1 2 3 3 3 4 4 5 7 6 9 7 10
temp:7 : 1 2 3 3 3 4 4 5 6 7 9 7 10
temp:9 : 1 2 3 3 3 4 4 5 6 7 7 9 10
after ascending sort: 1 2 3 3 3 4 4 5 6 7 7 9 10
after desending sort: 10 9 7 7 6 5 4 4 3 3 3 2 1
請按任意鍵繼續. . .

發佈了236 篇原創文章 · 獲贊 39 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章