zoukankan      html  css  js  c++  java
  • 排序算法(三):插入排序

    非常插入排序easy。像扑克。

    卡的手4,再次卡5在本能地放置在第一张牌的权利。

    假设一3然后从右到左扫描。只有被插入到左边的比这个数字大容量交换。

    插入排序是一种稳定的排序方法,时间复杂度O(n*n),空间复杂度O(1),最好的情况下时间复杂度为O(1).即本来就是一个有序或者相等的数组,则仅仅需比較n-1次就可以。下为源代码,仅仅需三行代码就可以。

    //============================================================================
    // Name        : QuikSort.cpp
    // Author      : YanZi
    // Version     :
    // Copyright   : Your copyright notice
    // Description : Hello World in C++, Ansi-style
    //============================================================================
    
    #include <iostream>
    #include <malloc.h>
    
    using namespace std;
    void swap1(int a, int b);
    void printArray(int* in, int n);
    
    void quickSort1(int* x, int l, int r);//双边扫描,高速排序
    void quickSort2(int x[], int l, int r);//单边扫描。高速排序
    void swap2(int &a,int &b); //交换,在MinGW上必须採用此方法,swap1无效
    
    
    #define N 8 //数组的长度
    
    int main() {
    	int* input = NULL;
    	input = (int*)malloc(N * sizeof(int));
    	if(input == NULL){
    		cout<<"内存溢出"<<endl;
    	}
    	for(int i = 0; i < N; i++){
    		input[i] = rand();
    	}
    	//	int input[] = {55, 41, 59, 26, 53, 58, 97, 93};
    
    	cout<<"原始数据:"<<endl;
    	printArray(input, N);
    
    	quickSort2(input, 0, N-1);
    	printArray(input, N);
    
    	return 0;
    }
    void swap1(int a, int b){
    	int temp = a;
    	a = b;
    	b = temp;
    }
    void printArray(int * in, int n){
    	if(in == NULL){
    		return;
    	}
    	for(int i = 0; i<n; i++){
    		cout<<" "<<in[i];
    	}
    	cout<<endl;
    
    }
    
    void quickSort1(int* x, int l, int r){
    
    	if(l < r){
    		int i = l, j = r, key = x[l];
    		while(i < j){
    			while( i < j && x[j] >= key){
    				j--;
    			}
    			if(i < j){
    				x[i++] = x[j];
    			}
    			while(i < j && x[i] <= key){
    				i++;
    			}
    			if(i < j){
    				x[j--] = x[i];
    			}
    		}
    		cout<<"i = " <<i<<" j = "<<j<<endl;
    		x[i] = key;
    		quickSort1(x, l, i-1);
    		quickSort1(x, i+1, r);
    	}
    
    }
    void quickSort2(int x[], int l, int r){
    	if(l >= r)
    		return;
    	int m = l;
    	for(int i = l + l; i <= r; i++ ){
    		if(x[i] < x[l]){
    			swap2(x[++m], x[i]);
    		}
    	}
    	swap2(x[l], x[m]);
    	quickSort2(x, l, m - 1);
    	quickSort2(x, m + 1, r);
    
    }
    void swap2(int &a,int &b){
    	if(a==b) return;//对同一地址的数据交换。会使其结果为0
    	a=a^b;
    	b=a^b;
    	a=a^b;
    }
    
    
    

    插入排序一个主要特征:理想的基本有序阵列,准确的分类。

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    PHP识别验证码-image-ocr
    Session的一些小疑问
    PHP-webdriver自动化测试完成登录
    大文件日志快速解析入库
    Linux权限说明
    使用python的selenium自动化登录获取cookie
    PHP编码的注释规范
    MySQL主主架构、读写分离搭建学习
    用docker尝试nginx的负载均衡
    lua require
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4855322.html
Copyright © 2011-2022 走看看