首页 > 编程语言 >C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)

C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)

时间:2024-01-29 23:45:01浏览次数:25  
标签:tmp vector int 冒泡排序 num 调试程序 排序 size

#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include <algorithm>
using namespace::std;

class Solution {
public:
	//直接插入排序
	void insertsort(vector<int>& num) {
		for (int i = 1; i < num.size(); i++) {
			int tmp = num[i], j = i - 1;			//tmp为监视哨
			while (j>=0&&tmp < num[j]) {			//j要防止越界
				num[j + 1] = num[j];			//比tmp大的数都向右挪一个位置
				j--;
			}
			num[j + 1] = tmp;			//tmp最后放在比它小的数的右边
		}
	}

	//冒泡排序(小数上浮)
	void bubblesort(vector<int>& num) {
		int i, j;
		for (i = 0; i < num.size()-1; i++) {			//num[i]存放上浮的最小数
			for (j = num.size() - 1; j > i; j--) {			//j>i,保证每一躺最后比较的是num[i]和num[i+1]
				if (num[j] < num[j - 1]) swap(num[j], num[j - 1]); 
			}
		}
	}

	//快速排序
	int traversal(vector<int>& num, int l, int r) {
		int tmp = num[l];
		int i = l, j = r;
		while (i < j) {
			while (num[j] > tmp && i < j) j--;
			if (num[j] < tmp && i < j) {
				num[i] = num[j];
			}
			while (num[i] < tmp && i < j)i++;
			if (num[i] > tmp && l < j) {
				num[j] = num[i];
			}
			num[i] = tmp;
		}
		return i;
	}
	void quicksort(vector<int>& num, int l, int r) {
		if (l < r) {
			int mid = traversal(num, l, r);
			quicksort(num, l, mid - 1);
			quicksort(num, mid + 1, r);
		}
	}

	//选择排序
	void selectsort(vector<int>& num) {
		for (int i = 0; i < num.size() - 1; i++) {
			int min = i;
			for (int j = i + 1; j < num.size(); j++) {
				if (num[j] < num[min]) {
					min = j;
				}
			}
			swap(num[i], num[min]);
		}
	}
};

int main() {
	vector<int> num{ 5, 8, 9, 6, 2 };
	Solution sort;
	//sort.insertsort(num);
	//sort.bubblesort(num);
	//sort.selectsort(num);
	sort.quicksort(num, 0, num.size()-1);
	for (auto n : num) {
		cout << n << ' ';  
	}
	cout << endl;  
}


快速排序最好最通用

标签:tmp,vector,int,冒泡排序,num,调试程序,排序,size
From: https://www.cnblogs.com/fly-smart/p/17995618

相关文章

  • 冒泡排序(2)
    #include<iostream>usingnamespacestd;structka{ stringname; intage; stringxin;};intmain(){ kaa[5]; kat; for(inti=0;i<5;i++){ cin>>a[i].name>>a[i].age>>a[i].xin; } for(inti=0;i<5;i++){for(int......
  • 148. 排序链表(中)
    目录题目法一、冒泡排序法二、归并排序题目给你链表的头结点head,请将其按升序排列并返回排序后的链表。法一、冒泡排序冒泡排序:两个for循环,i从头开始,j在i后一位开始,比较如果j小于i就交换,否则i往后移classSolution:defsortList(self,head:Optional[ListNo......
  • 洛谷题单指南-排序-P1093 [NOIP2007 普及组] 奖学金
    原题链接:https://www.luogu.com.cn/problem/P1093题意解读:本题考察排序,根据题意,先按总分从大到小排,再按语文从大到小排,以上都相同则按学号从小到大排。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=305;structstudent{intid;intyuw......
  • 洛谷题单指南-排序-P1059 [NOIP2006 普及组] 明明的随机数
    原题链接:https://www.luogu.com.cn/problem/P1059题意解读:此题主要做两件事:排序+去重,用计数排序即可解决,直接给出代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=1005;inta[N];intn;intmain(){cin>>n;intx;intcnt......
  • java冒泡排序的三种实现方法
    第一种通过简单的比较相邻的元素,如果他们的顺序是错误的,则交换它们的位置。重复这个步骤,直到没有更多要交换的元素为止。j变量代表未排序数组范围的右边界,j以后的已经排序publicstaticvoidbubble(int[]nums,intj){if(j==0){return;}......
  • 字符缓冲流读取复制文件、排序文件内容
    1publicstaticvoidmain(String[]args){2try(3//定义字符输入流与文件相通4BufferedReaderbr=newBufferedReader(newFileReader("src/test.txt"));5//定义字符输出流与文件相通6......
  • O(n) 排序 - 基数排序
    O(n)排序——基数排序题目:https://www.luogu.com.cn/problem/P1177基数排序来举个例子:我们需要对\(c\)1452313进行排序定义\(a\)23567,第\(i\)个表示序列中有\(a_i\)个小于\(i\)的元素。从左向右扫一遍,序列的确定部分如下加入1,?1?????,\(......
  • 桶排序(自创函数)
      1//综合2#include<iostream>3#include"liu.h"4usingnamespacestd;5classliu{6private:7intm=10;8intvalue;9intmaxx=10000;10intlist[10000]={0};11public:12......
  • 桶排序
    主函数#include<bits/stdc++.h>#include"Sort.h"usingnamespacestd;intmain(){intn;cin>>n;Sort.N=n;Sort.Cin();Sort.Cout();return0;}副函数classa{private:intlist[1000]={0};......
  • 桶排序&类 代码示范
    桶排序#include<iostream>usingnamespacestd;intmain(){ intvalue; inta,max=100000; intlist[max]={0}; cin>>a; for(inti=0;i<a;i++){ cin>>value; list[value]++; } for(inti=0;i<max;i++){ for(intj=0;j<list[i];j++){......