桶排序 選擇,插入排序

郭立恒發表於2024-11-10
(2)選擇排序:
基本思想:從陣列的未排序區域選出一個最小的元素,把它與陣列中的第一個元素交換位置;然後再從剩下的未排序區域中選出一個最小的元素,把它與陣列中的第二個元素交換位置。重複上述過程,直到陣列中的所有元素按升序排列完成。
【案例】
對一維陣列中的十個資料進行從小到大排序:
#include<iostream>
using namespace std;
int main(){
	int a[]={1,3,5,8,9,10,7,34,89,46};
	int m=0;
	for(int i=0;i<10;i++){
		int wz=i;
		for(int j=i+1;j<10;j++){
			if(a[j]<a[wz]){
				wz=j;
			}
		}
		m=a[i];
		a[i]=a[wz];
		a[wz]=m;
	}
	for(int i=0;i<10;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}
(3)插入排序:
基本思想:把一個要排序的陣列劃分為已排序和未排序的兩部分,再從未排序部分逐個去除元素,把它和已排序元素進行比較,從右到左比較相鄰的兩個元素,如果右邊的元素比左邊的元素小,則交換兩個元素,並向左繼續比較和交換,否則就停止比較。按此處理未排序部分的所有元素,最終得到一個按升序排列的有序陣列。這種演算法也叫直接插入排序。
【案例】
對一維陣列中的十個資料進行從小到大排序:
#include<iostream>
using namespace std;
int main(){
	int a[]={1,3,5,8,9,10,7,34,89,46};
	int m=0;
	for(int i=1;i<10;i++){
		for(int j=i;j>0;j--){
			if(a[j]<a[j-1]){
				m=a[j]; 
				a[j]=a[j-1];
				a[j-1]=m;	
			}else{
				j=0;
			}
		}
	
	}
	for(int i=0;i<10;i++){
		cout<<a[i]<<" ";
	}
	return 0;
}
桶排序思想:
把每個陣列開闢的空間看作一個桶,
將與桶編號相同的資料存入桶中

1 3 5 7 9 8 6 4 2 10 資料b[]
開闢桶的個數大於資料最大值
第一步:桶內初始化為0
第二步:判斷資料存入桶中 
 a[11] 
 a[0]...a[10]
if(i==b[j])
a[i]++;
第三步輸出:
if(a[i]!=0){
	i
	a[i]--;
}
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[10]={1,3,9,9,9,10,2,4,6,8};
	int b[1000];
	memset(b,0,sizeof(b));//陣列全部初始化為0
//	for(int i=0;i<1000;i++){
//		b[i]=0;
//	} 
	for(int i=0;i<10;i++){
		b[a[i]]++;
	}
	for(int i=0;i<1000;i++){
		while(b[i]!=0){
			cout<<i<<" "; 
			b[i]--;
		}
	}
	return 0;
}

  

相關文章