排序程式碼示例

王ys發表於2024-04-20

氣泡排序

#include<iostream>
using namespace std;
int main(){
	int m[]={6,8,44,7,9,34,64,1};
	for(int j=0;j<8;j++){
		for(int i=j+1;i<8;i++){
			if(m[j]>m[i]){
				swap(m[j],m[i]);
			}
		}
	}
	for(int i=0;i<8;i++){
		cout<<m[i]<<' ';
	}
	return 0;
}

/選擇排序

基本思想:從陣列的末排序區域選出一個最小的元素

把它與陣列中的第一個元素交換位置

然後再從剩下的末排序區域選出一個最小的元素

把它與陣列中的第二個元素交換位置

重複上述過程,直到陣列中的所有元素按升序排列完成

#include<iostream>
using namespace std;
int main(){
	int min=0;
	int m[]={6,8,44,7,9,34,64,1};
	for(int j=0;j<8;j++){
		min=j;
		for(int i=j+1;i<8;i++){
			if(m[i]<m[min]){
				min=i;
			}
		}
		swap(m[j],m[min]);
	}
	for(int i=0;i<8;i++){
		cout<<m[i]<<' ';
	}
	return 0;
}

/插入排序

基本思想:把一個要排序的陣列劃分為己排序和為排序的兩部分

再從未排序部分逐個去除元素

把它和己排序元素進行比較

從右到左比較相鄰的兩個元素

如果右邊的元素比左邊的元素小

則交換兩個元素,並向左繼續比較和交換

否則就停止比較

按此處理為排序部分的所有元素

最終得到一個按升序排列的有序陣列

這種演算法也叫直接插入排序

#include<iostream>
using namespace std;
int main(){
	int min=0;
	int m[]={6,8,44,7,9,34,64,1};
	for(int j=1;j<8;j++){
		for(int i=j;i>0;i--){
			if(m[i]<m[i-1]){
				swap(m[i],m[i-1]);
			}else{
				break;
			}
		}
	}
	for(int i=0;i<8;i++){
		cout<<m[i]<<' ';
	}
	return 0;
}

/希爾排序

對一維陣列中的十個陣列進行從小到大排序

基本思想:是直接插入排序的進階版本,

將整個待排序元素序列分割成若干個子序列,

(由相隔某個“增量”的元素組成)分別進行直接插入排序,然後縮減增量再進行排序,

待整個序列中的元素基本有序(增量足夠小)時,在對全體元素進行一次直接插入排序

#include<iostream>
#include<math.h>
using namespace std;
int main(){
	string m="wangjiaxing";
	for(double i=11;i>1;){
		i=round(i/2);
		for(int j=0;j+int(i)<11;j++){
			if(m[j]>m[j+int(i)]){
				swap(m[j],m[j+int(i)]);
			}
		}
	}
	cout<<m;
	return 0;
}

/快速排序

#include<iostream>
using namespace std;
int n[]={6,3,5,8,9,10,7,34,89,2};
void ks(int n[10],int i,int j){
	if(i<j){
		int p=i;
		int l=i,r=j;
		int m=n[p];
		while(l!=r){
			while(n[r]>=m&&l!=r){
				r--;
			}
			while(n[l]<=m&&l!=r){
				l++;
			}
			if(l<r){
				swap(n[l],n[r]);
			}
		}
		swap(n[i],n[l]);
		ks(n,i,l-1);
		ks(n,l+1,j);
	}
}
int main(){
	ks(n,0,9);
	for(int i=0;i<10;i++){
		cout<<n[i]<<" ";
	}
	return 0;
}

  

end

相關文章